2014-07-12 6 views
2

4 바이트 큼 블록에서 비트 연산을 수행하고 있습니다. ByteBuffer를 사용하여 4 바이트 블록을 4 바이트 정수로 변환했습니다.자바 - 바이트 - 홀수 결과로 캐스팅

일단 완료되면 바이트로 다시 캐스팅해야합니다. ByteBuffer를 사용하여 이것을 수행합니다.

int a = 1610612739; //simulate casting the 4-byte block 60 00 00 03 
ByteBuffer b = ByteBuffer.allocate(4); 
b.putInt(a); 
byte[] b1 = (b.array()); 

지금,이 코드 후에 나는 다음 개최 b1 기대 :

b1[0]: 60 
b1[1]: 00 
b1[2]: 00 
b1[3]: 03 

을하지만 그 무슨 일이 아니다 여기에 데이터에 몇 가지 예제 코드는, 내 혼란을 선택한입니다. 맨 왼쪽 비트는 부호입니다 대신에, 나는

b2[0]: 96 
b2[1]: 0 
b2[2]: 0 
b2[3]: 3 

내 샘플 정수, 이진,

0110 0000 0000 0000 0000 0000 0000 0011 ::해야 얻을.

96 00 00 03은 십진수로 Java의 32 비트 int 범위 밖에있는 2,516,582,403입니다.

무슨 일이 일어나는지 아는 사람 있습니까?

+14

왜냐하면 '96 == 0x60' 때문입니다. (힌트 : 너무 많은 사람들이 그것을 보지 않은 동안 질문을 삭제하십시오 :-) – dasblinkenlight

+2

+1은 너무 복잡합니다.^_^ – Dawnkeeper

+1

프로그래밍의 몇 년 후에 당신은 이들의 목록을 얻을. dll을 복사하는 것을 잊어 버리고 왜 어떤 코드를 여러 번 읽고 여러 번 오류가 누락 될지 궁금한 점이 있다면 대학은 즉시 if 문을 세미콜론으로 끝내는 것을 즉시 보게됩니다. 그것은 일어난다. – Dawnkeeper

답변

3

문제는 당신이 진수에 표시하도록되어 생각한다는 것입니다하지만 소수에 보여줍니다. 그게 전부 야.