13.3.2 位运算符
位运算是基于内存中二进制数据的运算,也就是基于位的运算。常见的位运算有左移运算、右移运算、按位与、按位或、按位非、按位异或等运算。
位运算的左移、右移元素其实就是整数在内存中的“左右移动”,其中左移运算符为<<,右移运算符为>>。比如十进制整数4在内存中最后一个字节的排列如下:
如果对其进行左移2位的操作(左移后右边的空缺用0补足,下方粗体的0就是补足的部分),则在内存中变为十进制数16;相同的原理,如果对4做右移2位的操作,则值为1。
- #
- 左移右移运算
- #4
- 左移2
- [root@localhost ]# let "value=4<<2"
- [root@localhost ]# echo $value
- 16
- #4
- 右移2
- [root@localhost ]# let "value=4>>2"
- [root@localhost ]# echo $value
- 1
按位与运算(&),是将两个整数写成二进制的形式,然后同位置相比较,只有当对应的二进制值都为1时,结果才为1。以8&4来说,计算方式如下,计算结果为0。
- #
- 按位与运算
- [root@localhost ]# let "value=8&4"
- [root@localhost ]# echo $value
- 0
按位或运算(|),是将两个整数写成二进制的形式,然后同位置相比较,只要对应的位置有1,结果就为1。以8|4来说,其计算方式如下,计算结果为12。
- #
- 按位或运算
- [root@localhost ]# let "value=8|4"
- [root@localhost ]# echo $value
- 12
按位异或运算(^),是将两个整数写成二进制的形式,然后同位置相比较,只要对应的位置同为0或同为1,结果就为0,否则为1。以10^3来说,其计算方式如下,计算结果为9。
- #
- 按位异或运算
- [root@localhost ]# let "value=10^3"
- [root@localhost ]# echo $value
- 9
按位非(~)的计算方式比较麻烦,这里有个快捷的计算公式:“~a”的值为“-(a+1)”。
- #
- 按位非运算
- [root@localhost ~]# let "value=~8"
- [root@localhost ~]# echo $value
- -9