gpt4 book ai didi

c++ - 检测 32 位整数溢出

转载 作者:太空狗 更新时间:2023-10-29 21:13:08 29 4
gpt4 key购买 nike

我有一个简单的方法,基本上可以反转有符号整数。此函数一直有效,直到整数小于或等于 32 位。例如:-

input = 321
output = 123

input = -321
output = -123

input = 1534236469
output = 9646324351 //this value is wrong.

expected output = 0

我想检测整数溢出并在这种情况下返回 0。下面是函数的代码

    int reverse(int x) {
int number = x;
bool negative = false;
if(number<0){
negative = true;
number *= -1;
}

int reversed = 0;
while (number != 0){
int reminder = number % 10;
reversed = (reversed * 10) + reminder;
number /= 10;
}
if(negative){
reversed *= -1;
}
return reversed;
}

此外,如果我将输入和输出更改为有符号长整型,我会得到所需的输出,但我想检测整数溢出并返回 0。

最佳答案

在将 reversed 乘以 10 之前,只需检查以确保它小到足以乘以 10。

同样,在添加 remainder 之前,请检查以确保它足够小以确保添加 remainder

您可以使用一个巧妙的技巧来进行加法运算,但在您的水平上您可能不应该这样做:

if ((reversed += remainder) < remainder) {
//overflow
}

请注意,该技巧仅在 reversedremainder 都未签名时才有效。

关于c++ - 检测 32 位整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45389366/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com