位运算指的是针对于二进制来进行操作的符号
1. 左移
- 指的是将一个数的二进制位全部左移若干位
如 m<<n,指的是将整数m的二进制左移n位,n>=0。
左边高位溢出舍弃,右边空位补0
15<<2:00001111<<2====>00111100(相当于十进制的60) - 在左移的过程中,如左边移除舍弃高位中不包含1的话,可以理解为左移1位,相当于该数字乘以2,左移n位相当于乘以2n。像上面的例子,15<<2的左移过程中舍弃高位中不包含1,所以结果为15*2*2=60
2. 右移
-
指的是将一个数的二进制位全部右移若干位。
如m>>n,指的是将整数m的二进制右移n位,n>=0。右边的移除位被舍弃,左边的空位补0或者是符号位,如果是无符号类型补0,有符号类型补符号位 -
无符号整数右移示例:
0111>>4:0000 0001 0001 0001>>4 ====>0000 0000 0001 0001(相当于006) -
有符号整数右移示例:
-4:[1000 0100] (原) ====>[1111 1011](反) ====>[1111 1100](补)
-4>>4:1111 1100(补)>>4 ====>1111 1111(补) ====>1111 1110(反) ====>1000 0001(原)(相当于十进制的-1)
所以对于有符号整数,右移一位相当于除以2,右移n位相当于除以2n
3. 位与运算符(and|&)
- &位运算符支持按位处理两个长度相同的二进制,在对应的位置上(1,1)->1;(0,1)->0;(1,0)->0;(0,0)->0。
- 特殊:n&1,即取n的二进制的最末位。这种方式也可以用来判断奇偶
4. 位或运算符(or||)
- |位运算符支持按位处理两个长度相同的二进制,在对应的位置上(1,1)->1;(0,1)->1;(1,0)->1;(0,0)->0。
5. 异或运算 ^
- ^运算符支持按位处理两个长度相同的二进制,在对应的位置上,相同为0,不同为1。
(1,1)->0;(0,1)->1;(1,0)->1;(0,0)->0。
6. 取反操作~
- ~是一元运算符,对一个二进制数每一位执行逻辑反操作,即1->0;0->1