zoukankan      html  css  js  c++  java
  • Linux之awk内建数学函数之左移运算、右移运算、按位取反运算

    摘要

    位操作是程序设计中对位模式按位或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。移位是一个二元运算符,用来将一个二进制数中的每一位全部都向一个方向移动指定位,溢出的部分将被舍弃,而空缺的部分填入一定的值。

     

    程序设计中,位操作运算符的一种。在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 ~]#

    awk_lshift_rshift2015_09_17_01_34_20

    来个右移位运算计算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 ~]#

    awk_rshift_ip2015_09_17_01_56_52

  • 相关阅读:
    Windows2012修改光驱盘符
    推薦幾個海外片源站
    Learning Puppet — Variables, Conditionals, and Facts
    红灯是否可以掉头?
    Windows Server 2008
    Learning Puppet — Resource Ordering
    Learning Puppet — Manifests
    Learning Puppet — Resources and the RAL
    quotas and disk replace on netapp
    美国夏令时与冬令时的区别
  • 原文地址:https://www.cnblogs.com/mfryf/p/12678023.html
Copyright © 2011-2022 走看看