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
'ProgramingTip' 카테고리의 다른 글
Java Generics-Bridge 방법? (0) | 2020.11.28 |
---|---|
실시간 공동 편집-어떻게 작동 작동? (0) | 2020.11.28 |
applicationWillTerminate 언제 호출되고 호출되지 않을 때 (0) | 2020.11.28 |
모든 DOM 요소를 반복하는 가장 효율적인 방법? (0) | 2020.11.28 |
Twitter 부트 유효성 3- 사용자 지정 글 리피 콘을 만들고 글 리피 "글꼴"에 추가 (0) | 2020.11.28 |