通过位运算修改指定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日

posted @ 2022-10-27 19:40  千松  阅读(577)  评论(0编辑  收藏  举报