>  기사  >  Java  >  Java에서 숫자 값에 "L"을 추가하면 곱셈 연산의 결과가 크게 바뀌는 이유는 무엇입니까?

Java에서 숫자 값에 "L"을 추가하면 곱셈 연산의 결과가 크게 바뀌는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 04:43:02347검색

Why does adding an

수치 불일치 이해

제공된 코드 조각에서 두 곱셈 연산 간의 명백한 불일치는 숫자 값에 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.