读取一个整数值转化为二进制

 读取一个整数值,将它转化成二进制数,并计算位是1的个数,然后显示出来。

  
  
  
  
  1. #! /bin/bash 
  2. # filename:netmask.sh
  3. declare -i a i q s=0 
  4. a=${1:-255
  5. mask="128 64 32 16 8 4 2 1" 
  6. Bmap= 
  7.  
  8. echo "1deweishu  128 64 32 16 8 4 2 1" 
  9. for i in $mask 
  10. do 
  11.         q=$((a/i)) 
  12.         ((s+=q)) 
  13.         [ $q -gt 0 ] && Bmap=$Bmap"_1_" || Bmap=$Bmap"_0_" 
  14.         a=$((a-q*i)) 
  15. done 
  16.  
  17. echo "    $s :    $Bmap" 

说明:

本例仅为示范,并未对输入值做检查,测试时,请提供255以内的整数。

行3,宣告a、i、q、s为整数型,s初始值为0。

行4,a设为命令行取得的参数值$1,如果没有提供,则a的默认值为255.

行5,mask为二进制各位的幂值列表。

行6,Bmap用来存放a化成二进制数后的字符串图标。

行9~15,使用for循环,求算a转成二进制数后,各位的值是1或0.

行12,s累计位是1的个数。

行13,如果q大于0,表示此位值是1,则Bmap附加位是1的字符串,否则附加位是0的字符串。

行14,更新a的值,假设a已除以128,则a要扣除128,然后进入一下个循环,继续计算。

例如:把218转化成为二进制
 
  
  
  
  
  1. [sam@CentOS_5 script]# ./netmask_2.sh 218 
  2. 1deweishu  128 64 32 16 8  4  2  1 
  3.     5 :    _1__1__0__1__1__0__1__0_ 

 

你可能感兴趣的:(shell,算术扩展)