程序设计中,位操作运算符的一种。在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\n",e,f,g,h) }' 8.8.8.8 [root@Legion10 ~]#