Long Long Int 할당의 오버플로: 정수 리터럴 곱셈이 실패하는 이유
제공된 코드 조각에서는 세 개의 Long Long 정수 할당이 시도됩니다.
long long int n = 2000*2000*2000*2000; // overflow long long int n = pow(2000,4); // works long long int n = 16000000000000; // works
세 번째 과제는 성공하는데 왜 long long int를 사용해도 첫 번째 항목이 오버플로되나요?
정수형 이해
오버플로가 발생하는 이유는 정수형의 특성에 있습니다. 기본적으로 정수 리터럴에는 int보다 작지 않고 해당 값을 나타낼 수 있는 가장 작은 유형이 할당됩니다. 주어진 경우 2000은 int이며 대부분의 시스템에서 일반적으로 32비트를 차지합니다.
곱셈 규칙
곱셈과 같은 산술 연산자는 관련된 두 가지 유형 중 더 크지만 int보다 작지는 않습니다. 예를 들어:
그러나 int * int는 여전히 연산자*(int,int) -> int.
유형 승격 및 오버플로
오버플로 할당에서 2000*2000*2000*2000은 4개의 int 값을 곱하여 결과적으로 int보다 큰 정수가 됩니다. 보유할 수 있습니다. 최종 결과가 long long int 변수에 저장됨에도 불구하고 곱셈은 int로 발생합니다.
오버플로 해결
오버플로를 방지하려면 다음을 사용할 수 있습니다. 접근 방식:
위 내용은 'long long int' 할당에서 정수 리터럴을 곱하면 오버플로가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!