zoukankan      html  css  js  c++  java
  • C语言移位算符">>"

    右移算符>>是将二进制数的每一位右移。如:a=32,a>>2,就是将32的二进制数100000每一个二进制位向右移动两位。得到的是二进制数1000,也就是8。

    #include <stdio.h>
    int main(void)
    {
      int a=32;
      int a_move = (a>>2);
      printf("a_move=%d
    ",a_move);
      return 0;
    }

    运行结果:

    $ gcc -o aa_move aa_move.c
    $ ./aa_move
    a_move=8

     如果移位之后转成二进制显示将更明白

     1 #include <stdio.h>
     2 #include <string.h>
     3 /*转换成其他进制的函数*/
     4 char *change(int val, int base, char *retbuf )
     5  {
     6      static char    *str = "0123456789ABCDEF";
     7      char *p;
     8      char buf[15];
     9 
    10      p = buf+14;
    11      *p = 0;
    12 
    13     do { *--p = str[val % base]; } while( val /= base );
    14      strcpy(retbuf,p);
    15      return retbuf;
    16  }
    17 
    18 void main()
    19  {
    20     int a=0;
    21     int j;
    22     char buf[32];
    23     //显示成:十进制  二进制  八进制  十六进制
    24     printf("   decimal  binary   octonary  hexadecimal
    ");
    25     for(j=0;j<8;j++)
    26     {
    27       a = (a<<1)+1;        //移位操作
    28 
    29       change(a,10,buf);   //十进制
    30       printf("a= %-8s",buf);
    31 
    32       change(a,2,buf);    //二进制
    33       printf(" %-8s",buf);
    34 
    35       change(a,8,buf);    //八进制
    36       printf(" %-8s",buf);
    37 
    38       change(a,16,buf);    //十六进制
    39       printf("  %-8s
    ",buf);
    40     }
    41 }

    运行结果

    $ gcc -o move move.c
    $ ./move
       decimal  binary   octonary  hexadecimal
    a= 1        1        1         1       
    a= 3        11       3         3       
    a= 7        111      7         7       
    a= 15       1111     17        F       
    a= 31       11111    37        1F      
    a= 63       111111   77        3F      
    a= 127      1111111  177       7F      
    a= 255      11111111 377       FF    
    

      

     tips:

    2的几次方就是二级制中,1向左移多少位得到。如 2^(3) = 1UL <<3。

    这在单位转换中很实用,例如将兆字节转为字节。1Megabyte = 2^10 Kilobyte = 2^10 * 2^10 Byte。那么512 Megabyte = 512 UL << 20。

  • 相关阅读:
    第38章 刷新令牌
    第37章 资源所有者密码验证(Resource Owner Password Validation)
    第36章 扩展授权
    第35章 秘密(secrets)
    第34章 授予类型
    node.js+ react + redux 环境搭建
    资源整理
    django form 组件插件
    django cookies与session
    django 初始命令
  • 原文地址:https://www.cnblogs.com/abc36725612/p/5945543.html
Copyright © 2011-2022 走看看