수치 불일치 이해
제공된 코드 조각에서 두 곱셈 연산 간의 명백한 불일치는 숫자 값에 "L" 문자 추가:
long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365;
긴 값을 보장하기 위해 "L" 추가
첫 번째 표현식에서 "L" 접미사 값이 64비트 정수로 처리되어야 함을 나타내는 긴 정수 리터럴을 나타냅니다. 이 곱셈의 결과는 연간 31536000000밀리초의 긴 값입니다.
"L"이 없으면 정수 값이 됩니다
두 번째 표현식에서 " L" 접미사를 사용하면 곱셈 연산은 정수 값을 생성합니다. 이 경우 기대값이 30억 밀리초 이상이어야 할 때 결과는 1471228928입니다.
정수 오버플로 및 잘림
4를 곱한 결과이므로 불일치가 발생합니다. 32비트 정수(1000, 60, 60, 24)와 다섯 번째 32비트 정수(365)가 정수 범위인 [-2^31, 2^31-1]을 초과합니다. 결과가 순환되어 두 번째 표현식에서 잘못된 값 1471228928이 생성됩니다.
2의 보수 표현으로 변환
"L" 접미사가 없는 경우, 정수를 곱한 결과가 음수이고 정수 범위를 초과하는 경우 정수 변수에 할당되기 전에 2의 보수 표현으로 변환됩니다. 이 변환을 통해 정수 범위 내에서 음수 값을 표현할 수 있습니다.
올바른 결과 보장
올바른 결과를 얻으려면 숫자 값을 선언하는 것이 필수적입니다. 적절한 표현을 보장하고 잘림이나 2의 보수 표현으로의 변환을 방지하기 위해 "L"을 추가하여 긴 값으로 정수 범위를 초과합니다.
위 내용은 Java에서 숫자 값에 "L"을 추가하면 곱셈 연산의 결과가 크게 바뀌는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!