Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 정수 오버플로를 감지하는 방법은 무엇입니까?


유일한 안전한 방법은 오버플로가 발생하기 전에 확인하는 것입니다. 그러나 정수 오버플로를 확인하는 몇 가지 해킹 방법이 있습니다. 따라서 unsigned int 추가에서 오버플로를 감지하는 것을 목표로 하는 경우 결과가 실제로 추가된 값보다 작은지 확인할 수 있습니다. 예를 들어

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

이는 x와 y가 모두 추가된 경우 unsigned int이고 오버플로되면 값이 둘 중 하나보다 클 수 없기 때문입니다. 이러한 값입니다.

또 다른 방법은 CPU의 오버플로 플래그에 액세스하려고 시도하는 것입니다. 일부 컴파일러는 테스트할 수 있는 액세스 권한을 제공하지만 이는 표준이 아닙니다.

이를 달성할 수 있는 다른 방법이 있지만 추정값만 제공합니다. 여기에서 확인할 수 있습니다 - https://stackoverflow.com/a/199455/3719089