整数的二进制表示方法和位操作符的运用

文章里的代码均再vs2022中执行

 整数二进制的三种表示方法:源码、反码、补码

三种表示方法的规则

有符号整数的三种表示方法中分为符号位数值位,最高位的1(表示为负)或0(表示为正)

正整数和0和源码、反码和补码都相同。

负整数的源码:将整数写成二进制的形式

负整数的反码:符号位不变,其余为取反(即1换位0,0换位1)

负整数的补码:反码+1

补码+1可得到源码

补码先-1再取反可达到源码  

注意:进行取反操作时,最高位的数字不变,即表示符号位的数字不变

 例如:

int a = 1;  

补码为:00000000000000000000000000000001

a的整形的大小为4个字节,即32个比特位。  一个字节是8个比特位。

int b = -1;

b的源码为:10000000000000000000000000000001

b的反码为:11111111111111111111111111111110

b的补码为:11111111111111111111111111111111

 

 位操作符(& | ^ ~)的运用

在补码上进行相应操作的规则:    

按位与& : 只要有0就是0,两个都为1才是1 
按位或 |  : 只要有1就是1,两个都为0才是0 
按位异或^  : 相同为0,相异为1
按位取反 ~  :进行取反操作(0换为1,1换为0)

如:

#include <stdio.h>
int main()
{
	int a = 1;   
	int b = -1;
	
	printf("%d\n", a & b);          //a的补码:00000000000000000000000000000001
									//b的补码:11111111111111111111111111111111
	                                //进行按位与操作后的补码:
									//         00000000000000000000000000000001 (为正整数)
									//故源码为 00000000000000000000000000000001 (即为1)

	printf("%d\n", a | b);          //a的补码:00000000000000000000000000000001
									//b的补码:11111111111111111111111111111111
	                                //进行按位或操作后的补码:
									//         11111111111111111111111111111111 (为负整数)
									//取反:   10000000000000000000000000000000
									//加1:    10000000000000000000000000000001  (此为源码,即为-1)
											  
	printf("%d\n", a ^ b);			//a的补码:00000000000000000000000000000001
									//b的补码:11111111111111111111111111111111
	                                //进行按位异或操作后的补码:
									//         11111111111111111111111111111110  (为负整数)
									//取反:   10000000000000000000000000000001
									//加1:    10000000000000000000000000000010  (此为源码,即为-2)

	printf("%d\n", ~a);				//a的补码:00000000000000000000000000000001
									//进行按位取反操作后的补码:(进行按位取反的操作时,符号位也需要取反)
									//         11111111111111111111111111111110
									//取反:   10000000000000000000000000000001   
									//加1:    10000000000000000000000000000010  (此为源码,即为-2)

	return 0;
}

 运行结果:

1
-1
-2
-2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值