我写这段代码只是为了看看如果我把一个负整数放入一个无符号整数数组中会发生什么。
#include <iostream>
int main()
{
using namespace std;
unsigned int array[4];
array[0]=4;
array[1]=4;
array[2]=2;
array[3]=-2;
cout << array[0] + array[1] + array[2] + array[3] << endl;
unsigned int b;
b=-2;
cout << b <<endl;
return 0;
}
我原以为在这两种情况下都会发生整数溢出。然而,只有在第二种情况下,真正发生了。在第一种情况下,一切都表现得好像是一个普通的整数数组,而不是一个无符号整数数组。那么究竟是什么导致了这种异常行为。在任何重要的情况下,我的编译器是 gcc 4.8。谢谢您的帮助。编辑:这是我电脑上的输出
8
4294967294
最佳答案
存在整数溢出。这是原因(数字被转换为 unsigned int)
1111 1111 1111 1111 1111 1111 1111 1110 // -2
+0000 0000 0000 0000 0000 0000 0000 0100 //+ 4
-------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0010 //= 2
+0000 0000 0000 0000 0000 0000 0000 0100 //+ 4
-------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0110 //= 6
+0000 0000 0000 0000 0000 0000 0000 0010 //+ 2
-------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1000 //= 8 -> the result
关于c++ - 无符号整数数组如何包含负整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21676164/