c语言的移位<<,C语言移位算符">>"

本文详细解释了二进制右移运算符`>>`的工作原理,并通过实例演示了如何将32转换为不同进制表示。通过代码示例和转换函数,读者可以理解移位操作在不同进制间的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

右移算符>>是将二进制数的每一位右移。如: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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值