출처 : http://kimgisa.net/241

자바에서는 unsigned 형이 없다.
0xF8 는 부호를 무시하면 248이지만, byte형에서는 부호비트가 고려되어 -8로 출력된다.

   byte b = (byte)0xF8;
   System.out.println(b);
   ----
   결과
   ----
   -8

원하는 결과를 얻기위해 이 byte형 변수 b를  int형 변수에 그냥 대입하게 되면,
역시 -248이 출력된다.

   byte b = (byte)0xF8;
   int i = b;
   System.out.println(i);
   ----
   결과
   ----
   -8


일반적인 대입의 경우 산술적인 형확장이 일어나기 때문에 부호비트가 고려되며
byte의 첫번째 비트인 부호비트는 int형으로 형확장되면서 부호가 그대로 적용된다.

원하는 결과인 248을 얻으려면 다음과 같이 하면된다.

   byte b = (byte)0xF8;
   int value = b & 0xFF;
   System.out.println(value);
   ----
   결과
   ----
   248


그러나, 비트연산의 경우는 다음과 같이 계산되어 원하는 결과를 얻을 수 있다.

0xFF : 00000000 00000000 00000000 11111111
                                                 11111000
------------------------------------------
결과 : 00000000 00000000 00000000 11111000



 

+ Recent posts