2013-05-30 1 views
0

쉬프트 나는 다음과 같은 코드가 있습니다비트 BYTE 형

byte my_byte; 
my_byte |= (1 << 7); 
my_byte |= (1 << 6);  

내가 발견 디버거를 사용하여 1로 my_byte 8 번째와 7 번째 비트를 설정하려고를 그 1 라인의 값을 실행 한 후 my_byte는 -128입니다. 두 번째 행을 실행 한 후 my_byte 값은 -64입니다.

최종 결과는 192 (2^7 + 2^6)라고 생각했습니다. 아무도 내가 뭘 잘못하고 있는지 알아?

또한 시작시 my_byte를 초기화해야합니까? 그렇다면 어떻게 모든 비트를 0으로 설정합니까?

도움 주셔서 감사합니다.

답변

1

문제는 byte에 서명되어 있기 때문에 10000000은 -128로 변환됩니다 (2의 보수). byte 대신 short을 사용하십시오. 단지 수행 0 short my_byte = 0;

P를 모든 비트를 초기화하기 : 쇼트 16 비트 인, 8 비트, AFAIK 자바

+1

앞에'char'에는 8 비트의 부호없는 기본 유형되어 있지 않다 바이트 달리 Java에서 부호없는 정수만 사용하는 것도 좋은 옵션입니다. –

+0

도움 주셔서 감사합니다. –