修改32位2进制数的某一位

本文介绍了如何利用位运算中的移位和取反操作来修改二进制数中的特定位。通过左移位将1定位到目标位置,然后使用按位或操作可以将0变为1;通过按位取反和按位与操作,可以将1变为0。示例中详细展示了修改二进制数倒数第三位的过程。
摘要由CSDN通过智能技术生成

我们如果想修改二进制数中的某一位,将它修改为0或1,使用移位,取反这两个操作符,可以很方便的修改

	int a = 11 //二进制为 00000000 00000000 00000000 00001011
	1.想把某一位的0修改为1/*1的32为2进制 00000000 00000000 00000000 00000001
	00000000 00000000 00000000 00001011   11的二进制
	00000000 00000000 00000000 00000001   1的二进制
	由于1的32进制只有一个1,所以通过左移将1移到想要修改的位,
	然后和原数进行按位或,就能把0修改为1
	加入我想把11的倒数第三位0修改为1*/
	a = a|(1<<2/*00000000 00000000 00000000 00001011
	00000000 00000000 00000000 00000100 两者或运算
	00000000 00000000 00000000 00001111 应该的结果,15*/
	printf("%d\n",a);打印结果也是15
   2.想把某一位的1修改为0:
   /*我想把15的第三位置为0
   00000000 00000000 00000000 00001111  15的二进制
   00000000 00000000 00000000 00000001 1的二进制位
   00000000 00000000 00000000 00000100 左移两位
   11111111 11111111 11111111 11111011 按位取反
   然后再和15的二进制进行按位与,即可将倒数第三位的1置为0*/
   a=a&(~(1<<2));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值