(资料图片仅供参考)
在上一篇文章中,我们介绍了&
运算符的基础用法,本篇文章,我们将介绍&
运算符的一些高级用法。
位掩码是一种用于按位操作的技术
它通过使用一个二进制数(掩码)来屏蔽或保留目标数中的一些特定位
例如,如果要将一个无符号整数的最高位清零,可以使用以下代码:
#include int main(){ unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100x &= ~(1U << 31); printf("x = %u\n",x);return 0;}
1U << 31
表示将一个无符号整数的最高位设置为 1
~(1U << 31)
取反得到掩码,再和原数进行按位与运算,就可以将最高位清零三、判断奇偶性二进制末尾位 | |
---|---|
奇数 | 1 |
偶数 | 0 |
#include int main(){ int x = 7; if (x & 1) { printf("%d 是奇数\n", x); } else { printf("%d 是偶数\n", x); } return 0;}
x & 1 将返回 x 的最后一位与 1 的按位与如果结果为 1,说明 x 是奇数,否则 x 是偶数。四、判断是否为 2 的幂次方如果一个数是 2 的幂次方,那么它的二进制表示中,只有最高位为 1,其他位都为 0把这个数减去1,那么它的二进制表示中,最高位为 0,其他位都为1x & (x - 1)
的结果一定为 0例如,判断16 是否是 2 的幂次方:#include int main(){ unsigned int x = 16; if (!(x & (x - 1))) { printf("%u 是 2 的幂次方\n", x); } else { printf("%u 不是 2 的幂次方\n", x); } return 0;}
小结通过这篇文章,我们学会了用位运算符&来做位掩码操作、判断奇偶性、判断一个数是否为2的幂次方。
在下一篇文章中,我们将介绍位运算符|
的几个高级用法。
关键词: