2014-10-14 2 views
3

저는 초보자입니다. 나는 오랜 시도 후에도이 줄을 이해할 수 없다.프리미티브 타입의 캐스팅

바이트 num = (바이트) 135;

이 줄은 결과 부호 -121에 왜 부호있는 숫자를 부여합니까?

누구든지 자세히 설명 할 수 있습니까?

+0

2의 보수 표현을 찾습니다. 기본적으로 135는 너무 커서 바이트에 맞추기에 너무 크며 –

+0

에 맞게 잘린 경우 음수처럼 보입니다. '바이트'는 8 비트 부호있는 값이고 -128에서 127 사이의 값을 가지기 때문에 비트 pattern for 135 (힌트 : Windows 계산기는 십진수, 8 진수, 2 진수 및 16 진수 사이에서 변환합니다)를 찾아 8 비트 부호있는 값으로 무엇을 의미하는지 파악합니다. –

답변

8

Java에서 byte은 항상 서명되어 있으며 -128에서 127까지의 범위에 있습니다. int 리터럴 135byte으로 다운 캐스팅되면 결과는 음수가됩니다. 왜냐하면 8 번째 비트가 설정되기 때문입니다.

1000 0111 

구체적 JLS, Section 5.1.3는 상태 :

일체형 T에 대한 부호 정수의 축소 변환은 단순히 n은 사용 된 비트들의 수는 상기 N 개의 최하위 비트 만, 모두 버리고 숫자 값의 크기에 대한 정보의 손실 가능성 외에도 결과 값의 부호가 입력 값의 부호와 다를 수 있습니다.

당신은이 로우 원시적 변환이다하는 byte135 같은 int 문자 등을 캐스팅합니다.