程序设计中,位操作运算符的一种。在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动 的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是 移动66次和移动2次得到的结果相同。
实例:
[root@Legion10 ~]# echo 233 | awk '{print lshift($1,5),rshift($1,5),$1}'
7456 7 233
[root@Legion10 ~]#
解析:
[root@Legion10 ~]# echo 233 | awk '{print lshift($1,5),rshift($1,5),$1}'
7456 7 233
[root@Legion10 ~]# cat 2
dec bin | dec bin
233 0000011101001 | 233 11101001
7456 1110100100000 | 7 00000111
----左移5位------------- | ----右移5位------------
[root@Legion10 ~]#
来个右移位运算计算ip
[root@Legion10 ~]# echo 134744072|awk '{
a=0xFF000000;
b=0xFF0000;
c=0xFF00;
d=0xFF;
e=rshift(and($1,a),24);
f=rshift(and($1,b),16);
g=rshift(and($1,c),8);
h=and($1,d);
printf("%d.%d.%d.%d
",e,f,g,h)
}'
8.8.8.8
[root@Legion10 ~]#

