右移算符>>是将二进制数的每一位右移。如:a=32,a>>2,就是将32的二进制数100000每一个二进制位向右移动两位。得到的是二进制数1000,也就是8。
#include
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
2 #include
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 returnretbuf;16 }17
18 voidmain()19 {20 int a=0;21 intj;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。