通过位运算修改指定bit位的值
通过位运算将指定位的值置0或1
问题样例
假如现在有一个8bit二进制数A,其可以为任何值,所以这里不妨先设A=(xxxxxxxx)2,{x|0,1}
现在需要你将A的几个指定位修改为1或0,例如将A修改为(x1x1xx00)2
要解决这个问题我们只需要用到与、或两种位运算
与运算的性质
与运算的真值表如下
a | b | a&b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
其内容很好总结,就相当于乘法中 “任何数乘0都得到0,两数都不为0时才得到非0”
与运算也是任何数与上0都得到0,两数都不为0时才得到非0,因此与运算也称作逻辑乘
或运算的性质
与运算的真值表如下
a | b | a|b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
从真值表来看,或运算就相当于无符号数加法
任何数或上1都得到1,两数都为0时才为到0,因此或运算也称作逻辑加
解决过程
1、用与运算将指定位置0
利用与运算中 ”任何数与0都得到0“ 这个性质,我们可以用与运算将指定位修改为0
将A修改为(xxxxxx00)2,是要让最后两位置0
所以我们构造一个数字B,让其最后两位为0,其他不变的位都为1,B=(11111100)2
最后A&B得到(xxxxxx00)2
2、用或运算将指定位置1
那么我们的第二步的做法就很明显了
根据或运算的 ”任何数或上1都得到1“ 这个性质,我们可以用或运算将指定位修改为1
同样是根据要修改的位构造数字B,这次是要将置1的位设1,不变的位设0
所以B=(01010000)2,最后A|B得到(x1x1xxxx)2
这样两步下来之后我们便成功将A=(xxxxxxxx)2变为了(x1x1xx00)2
本文编辑于2022年10月22日
最近修改于2022年11月5日