如何获取和设置一个值的二进制第n位?

    1.如何获取第n位的值,例如:10的二进制为1010,获取第1位是1,第2位是0(从低位到高位,从第0位开始数)。

    公式:(x >> n)  & 1,将x右移n位然后与1位与运算。

    右移n位的目的是将要获取的位移至最右低位,与1位与运算,最低位保持原值其他位全变0.

    

    image.png    


    2.如何设置第n位的值,例如:10的二进制为1010,设置第1位为0,变为1000.(从低位到高位,从第0位开始数)。

    公式: x  ^=  (x&(1<<n)) ^ (a<<n) .目的是改变n位的值,其他位不能变。

    这里需要用到异或运算。异或有个规律是和0异或结果为本身,所以需要其他位是0的一个数。那n位的值又该怎么确定呢?我们并不知道n位原来是0还是1。这里用到异或的另一个规律就是和同一个数异或两次结果为本身,所以需要将要设置的值与原值异或两次。综合两点可得公式。

  image.png

   


     测试:

    image.png

    image.png

演示站
上一篇:Qt怎么将界面保存为图片?
下一篇:已知两点坐标,求两点连成的直线中的某一点坐标

发表评论