ProgramingTip

Java Primitives 범위 계산

bestdevel 2020. 11. 28. 10:11
반응형

Java Primitives 범위 계산


자바에서 선언 할 때

short number=1024*1024*1024; 

시간 오류가 발생하지만

short number=1024 * 1024 * 1024 * 1024;

잘됩니다. 왜 이런 일이 발생합니까?


이 경우 컴파일러는 계산을 평가하고 (상수 만 포함되어 있기 때문에) 결과를 변수에 할당합니다. 이 계산은 유형으로 수행 할 수있는 경우 할당시 int에만 변환 short됩니다.

귀하의 경우 첫 번째 계산이 너무 커서 short( 1073741824) 에 맞지 언어 . 두 번째는 오버플로 int하고 short( 0) 지원 하는 범위에있게 됩니다. 이 경우 할당이 작동합니다.

당신은 아마 코드에서 이런 것들에 의존하고 않을 것입니다.


당신은 당신의 숫자가 있기 때문에 문제에 직면하고 있습니다 . 첫 번째 경우에는 그렇지 않아 짧은 범위를 넘습니다. 그러나 두 번째 경우에는 계산 후 래핑 오류가 발생하지 않습니다.

상당한 감액은 주어진 값의 정보를 잃는다는 것을 의미합니다. ( 짧은 데이터 유형은 16 비트 부호있는 2의 보수 정수입니다. 최소값은 -32,768이고 최대 값은 32,767 (포함)입니다. ) 첫 번째 경우 단락입니다 범위가 교차되어 (1073741824) 정보를 잃어 버리는 것입니다.

부호있는 정수를 정수 유형 T로 축소 변환하면 n 개의 최하위 비트를 사용하여 모든 비트가 삭제됩니다. 여기서 n은 유형 T를 사용하는 비트 수입니다.

편집하다 :-

에서 JLS §3.10.1 (언급 된 매우에 정확하게 비슷한 질문)

INT 유형의 10 진수 리터럴이 2147483648 (2 31 ) 보다 크 거나 10 진수 리터럴 2147483648이 단항 빼기 연산자 ( §15.15.4 ) 의 피연산자가 아닌 다른 곳에 나타나는 경우 컴파일 타임 오류 입니다.

참고 URL : https://stackoverflow.com/questions/24772953/java-primitives-range-calculation

반응형