如何获取和设置一个值的二进制第n位?
1.如何获取第n位的值,例如:10的二进制为1010,获取第1位是1,第2位是0(从低位到高位,从第0位开始数)。
公式:(x >> n) & 1,将x右移n位然后与1位与运算。
右移n位的目的是将要获取的位移至最右低位,与1位与运算,最低位保持原值其他位全变0.
2.如何设置第n位的值,例如:10的二进制为1010,设置第1位为0,变为1000.(从低位到高位,从第0位开始数)。
公式: x ^= (x&(1<<n)) ^ (a<<n) . 设置x的n位为a。
目的是改变n位的值,其他位不能变。
这里需要用到异或运算。异或有个规律是和0异或结果为本身,所以需要其他位是0的一个数。那n位的值又该怎么确定呢?我们并不知道n位原来是0还是1。这里用到异或的另一个规律就是和同一个数异或两次结果为本身,所以需要将要设置的值与原值异或两次。综合两点可得公式。
测试: