gpt4 book ai didi

c - 使用 16b 值时检测溢出和进位

转载 作者:行者123 更新时间:2023-11-30 17:30:00 25 4
gpt4 key购买 nike

我正在使用带符号的 16 位宽变量。当加法、减法等时,我可以通过以下方式检测进位和溢出吗:

我将结果存储在一个32位宽的变量中,然后检查第17位(0-16位代表该值,如果有进位或溢出,则17h位应该为1 - 溢出)?如果它是 1,那么它是溢出/进位,如果它是零,则不是。使用 16b 值时,可以在不溢出的情况下发生进位吗?

我搜索了 StackOverflow,但无法找到问题的明确答案。

最佳答案

更新:当操作数在执行操作时针对限制(在 limit.h 中声明)进行测试时,可以使用一种方法。例如。看看这个“安全”的附加函数:

int safe_add(int x, int y)
{
if(y < 0)
return save_sub(x, -y);
if(x > (INT_MAX - y))
{
printf("overflow\n");
return INT_MAX;
}
return x + y;
}

int save_sub(int x, int y)
{
if(y < 0)
return save_add(x, -y);
if(x > (INT_MIN + y))
{
printf("underflow\n");
return INT_MIN;
}
return x - y;
}

注意:这些方法至少有一个错误:如果对最大负整数 INT_MIN 调用,它们可能会失败。

关于c - 使用 16b 值时检测溢出和进位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25349492/

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