复习知识点
原码:最高位为符号位,0代表正数,1代表负数
反码:正数的反码与原码一致,负数的反码保持符号位不变,其余的按位取反
补码:正数的补码与原码一致,负数的补码等于其反码加一
以 5 和 -5 为例
数字 | 原码 | 反码 | 补码 |
5 | 0000 0101 | 0000 0101 | 0000 0101 |
-5 | 1000 0101 | 1111 1010 | 1111 1011 |
对 5 进行按位取反的结果推演
0000 0101按位取反(~)
1111 1010(计算机内的数字是以补码的形式存在的,所以这是个补码,需要倒推出它的原码)
最高位为1,说明是个负数
补码=反码+1
反码=补码-1
反码 = 1111 1010 - 0000 0001 = 1111 1001
保持反码符号位不变,其余按位取反可得原码
1111 1001取反=1000 0110=-6(十进制)
对按位取反后得二进制结果1111 1010保持符号位不变,然后取反加一也可得原码
1111 1010取反=1000 0101
1000 0101 + 1 = 1000 0110=-6
代码
#include <stdio.h>
int main()
{
int a=5;
int b=~a;
printf("%d",b);
return 0;
}
结果
-6