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

Làm thế nào để phát hiện tràn số nguyên trong 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 không dấu, bạn có thể kiểm tra xem kết quả có thực sự nhỏ hơn giá trị gia tăng hay không. Ví dụ:

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 những 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.

Có nhiều cách khác để đạt được điều này nhưng chúng chỉ cung cấp ước tính. Bạn có thể xem chúng tại đây - https://stackoverflow.com/a/199455/3719089