【发布时间】:2015-08-13 21:52:33
【问题描述】:
由于有符号整数溢出,我得到的是“-2147483648”,而不是数字“2147483648”。我尝试将变量声明为 long int 和 unsigned int 都没有用。他们只是不被认为是这样的类型。如果有人想知道,我会改变值。
int multiplier = 1,i;
long int mpy = 0;
for(i=32;i>=0;i--){
mpy = 1 << multiplier++;
printf("mpy = %d\n",mpy);
}
【问题讨论】:
-
请提供一个完整、最小且可验证的示例。
-
我做了丹尼尔,虽然你只需要循环它直到它作为有符号整数溢出
-
有符号类型的溢出会导致未定义的行为。你不知道会发生什么。您可以试验并找出通常发生的情况,但不能保证通常发生的事情总是会发生,也不能保证其他编译器或其他版本的编译器会以同样的方式做事。
-
在您的
printf()格式字符串中使用%d将打印一个无符号整数,就好像它是一个设置了相同位的有符号整数......同样,使用%u将显示有符号整数或无符号整数作为无符号。 -
谢谢你的提示,我不是一个 C 人,我来自 OOP 环境,所以那些 printf 标签对我来说是新奇的,我第一次见到 %u,现在我只有少数人有经验。
标签: c integer overflow long-integer unsigned-integer