#include <iostream>
int main()
{
uint a = 5;
int b;
int c;
b = (-1) << 3;
c = -1 ^ b;
std::cout << "b:" << b << std::endl;
std::cout << "c:" << c << std::endl;
}
1,(-1) << 3
1.1,求-1补码
-1原码:10000001
-1反码:11111110
-1补码:111111111.2,求-1补码左移3位
11111111 << 3
=111110001.3,求补码左移后结果的原码
补码:11111000
反码:10000111
原码:10001000
=-8
2,-1 ^ (-1) << 3
2.1,求-1补码
-1补码:11111111
2.2,求b补码
b补码:11111000
2.2,补码异或运算
异或:00000111
2.3,结果的原码
结果:00000111
=7
补码的原码即原码的补码的补码。正数的补码是其本身
-
正整数的原码、反码和补码是一样的,即看到符号位(第一位)是0,就可以照着写出其他两种码。
-
负数部分: 原码和反码的相互转换:符号位不变,数值位按位取反 原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1 已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1