刚看c++Primer,关于无符号数计算问题。
#include <iostream>
using namespace std;
int main ()
{
unsigned u=10,u2=42;
int i=10,i2=42;
cout<<u2-u<<endl;// 32
cout<<u-u2<<endl;// 4294967264
cout<<i2-i<<endl;// 32
cout<<i-i2<<endl;// -32
cout<<i-u<<endl // 0
cout<<u-i<<endl // 0
return 0;
}
00000000 00000000 00000000 00001010 (10)原码
00000000 00000000 00000000 00001010 补码
00000000 00000000 00000000 00101010 (42)原码
11111111 11111111 11111111 11010101 反码
11111111 11111111 11111111 11010110 补码
10-42就是10的补码与-42的补码相加
00000000 00000000 00000000 00001010
11111111 11111111 11111111 11010110
11111111 11111111 11111111 11100000
得到的结果用无符号表示就是4294967264