use*_*611 8 c c++ unsigned signed ones-complement
我正在使用Visual Studio 2013.
最近我尝试了~运算符1的补码:
int a = 10;
cout << ~a << endl;
Run Code Online (Sandbox Code Playgroud)
输出是 -11
但对于
unsigned int a = 10;
cout << ~a << endl;
Run Code Online (Sandbox Code Playgroud)
输出是 4294967296
我不明白为什么输出是-11签名的情况int.请帮我解决这个困惑.
Iva*_*kir 17
当你将数字10放入32位有符号或无符号整数时,你就得到了
0000 0000 0000 0000 0000 0000 0000 1010
Run Code Online (Sandbox Code Playgroud)
当你否定它时,你会得到
1111 1111 1111 1111 1111 1111 1111 0101
Run Code Online (Sandbox Code Playgroud)
这32位表示4294967285作为无符号整数,或-11表示有符号整数(您的计算机将负整数表示为二进制补码).它们还可以表示32位浮点数或4个8位字符.
比特没有任何"绝对"含义.它们可以代表任何东西,具体取决于你"看"它们的方式(它们具有哪种类型).