출처 : http://kimgisa.net/241
자바에서는 unsigned 형이 없다.
0xF8 는 부호를 무시하면 248이지만, byte형에서는 부호비트가 고려되어 -8로 출력된다.
byte b = (byte)0xF8;
System.out.println(b);
----
결과
----
-8
System.out.println(b);
----
결과
----
-8
원하는 결과를 얻기위해 이 byte형 변수 b를 int형 변수에 그냥 대입하게 되면,
역시 -248이 출력된다.
byte b = (byte)0xF8;
int i = b;
System.out.println(i);
----
결과
----
-8
int i = b;
System.out.println(i);
----
결과
----
-8
일반적인 대입의 경우 산술적인 형확장이 일어나기 때문에 부호비트가 고려되며
byte의 첫번째 비트인 부호비트는 int형으로 형확장되면서 부호가 그대로 적용된다.
원하는 결과인 248을 얻으려면 다음과 같이 하면된다.
byte b = (byte)0xF8;
int value = b & 0xFF;
System.out.println(value);
----
결과
----
248
int value = b & 0xFF;
System.out.println(value);
----
결과
----
248
그러나, 비트연산의 경우는 다음과 같이 계산되어 원하는 결과를 얻을 수 있다.
0xFF : 00000000 00000000 00000000 11111111
11111000
------------------------------------------
결과 : 00000000 00000000 00000000 11111000
11111000
------------------------------------------
결과 : 00000000 00000000 00000000 11111000
'etc > old' 카테고리의 다른 글
PhotoShop에서 ICO 파일 만들기 (0) | 2008.12.15 |
---|---|
syntaxhighlighter를 tistory에 설치 하는 방법 (1) | 2008.12.12 |
쿠키에서 한글 깨지는 문제 해결 (0) | 2008.11.26 |
ibatis에서 insert하고 id값 받기 (DB별) (0) | 2008.11.14 |
초간단 오라클 접속 테스트 (0) | 2008.11.14 |