Computer >> Máy Tính >  >> Lập trình >> lập trình C

Làm thế nào để phát hiện tràn số nguyên trong C / C ++?


Cách an toàn duy nhất là kiểm tra sự cố tràn trước khi nó xảy ra. Tuy nhiên, có một số cách kiểm tra lỗi tràn số nguyên. Vì vậy, nếu bạn đang muốn phát hiện tràn trong phần bổ sung int unsigned, bạn có thể kiểm tra xem kết quả có thực sự nhỏ hơn một trong hai giá trị được thêm hay không. Ví dụ:

Mã mẫu

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

Điều này là do nếu x và y đều là int không dấu, nếu được thêm vào và chúng tràn, giá trị của chúng không thể lớn hơn một trong hai vì nó sẽ cần lớn hơn số int không dấu tối đa có thể để có thể quấn quanh và vượt lên. trong số các giá trị này.

Một cách khác là thử và truy cập cờ tràn trong CPU của bạn. Một số trình biên dịch cung cấp quyền truy cập vào nó mà sau đó bạn có thể kiểm tra nhưng điều này không chuẩn.