gpt4 book ai didi

c++ - 为什么 unsigned int 在 C++ 中给出负值?

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:03 24 4
gpt4 key购买 nike

我有两个函数 add 和 main,如下所示。

int add(unsigned int a, unsigned int b)
{
return a+b;
}

int main()
{
unsigned int a,b;
cout << "Enter a value for a: ";
cin >> a;
cout << "Enter a value for b: ";
cin >> b;
cout << "a: " << a << " b: "<<b <<endl;
cout << "Result is: " << add(a,b) <<endl;

return 0;
}

当我运行这个程序时,我得到以下结果:

Enter a value for a: -1
Enter a value for b: -2
a: 4294967295 b: 4294967294
Result is: -3

为什么结果是-3?

最佳答案

因为 add 返回一个 int(没有 unsigned int),它不能表示 4294967295 + 4294967294 = 4294967293 (无符号整数运算定义为 mod 2^n,在本例中为 n = 32)因为结果太大。

因此,您已经签署了整数溢出(或者更准确地说,是从不能表示为 int 的源整数的隐式转换),它具有实现定义的结果,即任何输出(即表示为 int) 将是“正确的”。

得到 -3 的原因是结果是 2^32 - 3 并在你的计算机上转换为 -3系统。但请注意,任何结果都同样合法。

关于c++ - 为什么 unsigned int 在 C++ 中给出负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036511/

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