2017-05-03 2 views
0

누군가가, 우리는 공식을 사용하여 자바 부호없는 바이트에 서명 바이트를 변환 할 수 있다고 얘기했다수식 int unsignedByte = signedByte> = 0을 사용하여 부호있는 바이트를 부호없는 바이트로 변환 하시겠습니까? signedByte : 256 + signedByte;

int unsignedByte = signedByte >= 0 ? signedByte : 256 + signedByte; 

그러나 예를 들어, 나는 -128 1 (바이트 값 범위의 signedByte 값이있는 경우 ~ 127),이 수식을 사용하므로 1 >= 0true으로 평가되므로 첫 번째식이 사용되어 1 + 1이되며 이는 2과 같습니다. 그러나 unsignedByte에서 129로 표시된 동일한 숫자를 기대하고 있었습니까?

이해가 잘못되었거나 잘못되었습니다.

실제 서명 된 값과 부호없는 값을 사용한 예가 대단히 감사하겠습니다.

당신은 너무 같은 비트 AND 연산자 사용할 수

답변

1

:

int unsignedByte = signedByte&255; 

는 본질적으로 이것은 (31 0 인덱스 에서) 다시 더 높은 비트에 부정적인인지 규정하는 비트를 변경 허용 된 공간을 증가

int unsignedByte = 
    signedByte >= 0 ? 
     signedByte // you get this 
     : 256 + signedByte; // or this 

하지

:
1

당신은 삼항 연산자를 오해
int unsignedByte = 
    (signedByte >= 0 ? signedByte : 256) 
    + signedByte; 
+0

그래서 값이 1 인 signedByte> = 0이 true로 평가되면 int unsignedByte = 1입니까? 하지만 int unsignedByte는 129와 같아야한다고 생각 했나요? – Thor

+2

* "unsignedByte = 1?하지만 unsignedByte는 129와 같아야한다고 생각 했습니까?"* 아니요, 틀렸어요. https://en.wikipedia.org/wiki/Two%27s_complement –

+1

안전을 위해서, 항상'256 + signedByte'를 괄호에 넣고 모든 의심할만한 것들을 제거 할 수 있습니다. –

관련 문제