Programing/JAVA

java c 와 tcp 통신시 주의점. signed unsigned byte양수표현 음수양수변환

리커니 2018. 2. 6.
반응형

 

java c 와 tcp 통신시 주의점. signed unsigned byte양수표현 음수양수변환

 

java는 c 와 tcp 통신시 주의점이 있습니다.

기본형의 최소단위 차이인데요. c에는 bit 이 최소 단위이지만, java 는 byte가 최소 단위 입니다.

8 bit 가 1byte 가 되죠.

 

근데 뭐가 문제냐. 바로 자료형의 범위 입니다.

자바는 unsigned 키워드가 없기 때문에 -128 ~ 127 까지의 범위를 갖습니다.

(signed : 부호가 있는)

하지만 unsinged 키워드가 있는 c 는 0 ~ 255 까지의 범위를 갖죠.

 

 

 

그래서 127이 넘는 byte 는 음수로 표현이 되게 됩니다.

211을 byte로 변형하면 1101 0011 이 됩니다. 여기서 맨앞 비트가 1이기

자바에서는 때문에 음수로 인식하죠.

그래서 출력을 해보면 -45 라는 음수를 표출합니다.

byte test = (byte)211;

 

이것을 양수로 표현하기 위해서는 비트연산자인 &를 사용합니다.

byte test = (byte)(211 & 0xff);   // 211

 

논리곱(&) 연산자는 각비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환합니다.

위에서 보신데로 211을 바이트로 변형하면 1101 0011 이 되죠.

이것을 0xff(255) 1111 1111 와 논리곱 연산을 하는 것입니다.

1101 0011

1111 1111

=======

1101 0011     그럼 왼쪽과 같은 결과가 나오게 되죠.

 

16진수인 0xff 와 논리곱 연산을 하게되면 0xD3 (1101 0011) 와 같은 16진수 결과가 나오게 되고

이것을 바이트 변환 하는 것입니다. 그럼 원래의 값인 211이라는 양수표현이 되는것이죠.

반응형

댓글

💲 추천 글