按位运算与移位运算
按位与移位的学习只是要知道底层是怎么工作的,日常很少用到
按位运算
- 按位与
&
: 1&1=1, 其他都是0- 应用:让某一位或某些位位0: x & 0xFE
- 取一个数的某一段: x & 0xFF
- 应用:让某一位或某些位位0: x & 0xFE
- 按位或
|
; 1 | 0=1, 1 | 1=1, 0 | 0=0- 应用:使某位为1;
- 拼数:0xFF00 | 0x00FF
- 应用:使某位为1;
- 按位取反
~
:1->0, 0->1- 得到全部为1的数: ~0
- 7的二进制为0111, x | 7使低3位为1;
- x & ~7, 则使低3位为0
- 按位异或
^
: 相同为0, 不同为1;- x^y ^y ==> x
- x=y ,x^y=0
移位运算
左移:i << j
- i 中所有的为向左移动 j 个位置,右边填0;
- 所有小于int 的类型,移位以int的方式来做,结果是int
x <<= 1 等价 x *= 2
x <<= n 等价 x *= 2^n
右移:i << j
- i 中所有的为向右移动 j 个位置,
- 所有小于int 的类型,移位以int的方式来做,结果是int
- 对与unsigned的类型,左边填入0
- 而signed的类型,左边填入原来的最高位
x <<= 1 等价 x /= 2
x <<= n 等价 x /= 2^n
移位不能用负数