2010-03-27 4 views
6
int val = 233; 
byte b = (byte) val; 
System.out.println(b); 

나는 간단한 값을 가지고있다. 나는 하나의 정수에 어떤 값을 가지고있다. & 출력을 위해 그 값을 바이트로 변환하고 싶다. 그러나이 경우에 부정적인 가치가 올 것입니다.int를 java에 바이트로 할당 하시겠습니까?

int 값을 바이트 유형에 성공적으로 배치하려면 어떻게해야합니까?

+1

불행히도 Java의 바이트는 서명됩니다. 더 큰 데이터 유형이나 사용자 정의 클래스를 사용해보십시오. – missingfaktor

+0

@ user303218 : val 값의 범위는 무엇입니까? 0-255? – Roman

+0

@Rahul, 왜 서명 된 바이트가 "불행"합니까? –

답변

14

Java byte 범위는 -128-127입니다. 오버플로없이 바이트에 정수 233을 저장할 수 없습니다.

+1

아니면 오히려 - 할 수 있지만 바이트가 넘치고 있습니다. –

14

자바의 byte 그 범위 부호있는 8 비트 숫자 유형이 -128127 (JLS 4.2.1)에. 233이이 범위를 벗어납니다. 동일한 비트 패턴이 대신 -23을 나타냅니다. 만약 byteVariable = (byte) intVariable이를 수행 한 다음, 바이트 내의 int의 제 8 비트를 저장하기에 고집

11101001 = 1 + 8 + 32 + 64 + 128 = 233 (int) 
      1 + 8 + 32 + 64 - 128 = -23 (byte) 

는 말했다. 이 값을 int으로 다시 입력해야하는 경우 가능한 모든 부호 확장 (즉, intVariable = byteVariable & 0xFF;)을 마스크해야합니다.

5

바이트 부호없는 값이 필요한 경우 b&0xFF.

8

한 바이트에 256 개의 값을 사용할 수 있습니다. 기본 범위는 -128에서 127이지만, 임의의 256 값을 약간의 변환으로 나타낼 수 있습니다. 귀하의 경우에는 비트를 마스킹 제안을 따르십시오.

int val =233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233. 
0

바이트는 본질적으로 서명되므로 -128에서 127 범위의 값을 저장할 수 있습니다. 타입 캐스팅 후에 정의 된 범위보다 더 큰 값을 저장할 수는 있지만 정의 된 범위의 순환은 다음과 같이 발생합니다. cycling nature of range

관련 문제