按位与&
如果(x)i == 1 并且(y)i == 1,那么(x & y)i = 1,否则(x & y)i = 0;按位同为1即为1 否则为0;
- 按位与常用于两种应用:
- 让某一位或某些位为0 :x & 0xFE
- 取一个数中的一段: x & 0xFF
按位或 |
如果(x)i == 1 或 (y)i == 1,那么(x | y)i = 1,否则 (x | y)i = 0;按位有1则为1,否则为0
- 按位或长用于两种应用
- 使得一位或几个位为1: x | 0x01
- 把两个数拼起来: 0x00ff | 0xff00
按位取反 ~
(~x)i = 1 - (x)i; 把1变成0,0变成1;
- 想得到全部位为1的数: ~0;
- 7的二进制是0111,x|7使得低3位为1,而x & ~7,就使得低3位为0
按位异或 ^
如果(x)i == (y)i,那么(x ^ y)i = 0,否则,(x ^ y)i = 1;按位相同为0,否则为1;
- 如果x和y相等,那么x^y的结果为0;
- 对一个变量用同一个值异或两次,等于什么也没做(原值),即 x ^ y ^ y = x.
左移<<
i << j
- i中所有的位向左移动j个位置,右边填入0;
- 所有小于int的类型,移位以int的方式来做,结果是int
- x << 1 等价于 x *= 2
- x << n 等价于 x *= 2^n
右移>>
i >> j
- i中所有的位向右移动j个位置,左边填入0;
- 所有小于int的类型,移位以int的方式来做,结果是int
- 对于unsigned的类型,左边填入0
- 对于signed的类型,左边填入原来的最高位(保持符号不变)
- x >> 1 等价于 x /= 2
- x >> n 等价于 x /= 2^n
网友评论