C 练习实例55-学习使用按位取反~

复习知识点

原码:最高位为符号位,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 
int main()
{
	int a=5;
	int b=~a;
	printf("%d",b);
	return 0;
}

结果

-6

你可能感兴趣的:(c语言经典100题,c语言)