一、左移运算(<<)
左移运算符是一个二元的运算符,也就是有两个操作数,表示为x << y(x左移y位(二进制))。
其中x和y均为整数。
左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。
例如,9<<3可以转换为如下的运算:
<< 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
-----------------------------------------------------------------------------------
0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000 (72 在内存中的存储)
所以9<<3的结果为 72。
又如,(-9)<<3可以转换为如下的运算:
<< 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
-----------------------------------------------------------------------------------
1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000 (-72 在内存中的存储)
所以(-9)<<3的结果为 -72
左移的执行结果
X << y的执行结果等价于: x * 2^y
如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。
负数左移的执行结果
(-x)<< y 等价于 -(x << y)
左移负数位是什么情况
左移负数位其实效果和右移对应整数数值位一致
左移溢出会如何
高位左移溢出则舍弃该高位。
二、左移运算符的应用
1.取模转化成位运算
2.生成标记码
1 << k 作为第k个标记位的标记码
- 标记位置1
- 特点:位或上1,结果为1;位或上0,结果不变。
x | (1 << k)
2.标记位置0
1.特点: 位与上0,结果为0;位与上1,结果不变。
x & (~(1 << k) )
3.标记位取反
1.特点: 异或上1,结果取反;异或上0,结果不变。
x ^ (1 << k)