c语言移位详解

实验平台 vs2017

 

左移位和右移位有区别.

左移位比较简单,就是直接在低位后面补0;

右移位则比较复杂,

假设有10000000的二进制数,往右移动一位,则数变为11000000,原因在于补的高位是原来的第一位,

也就是说如果是01000000,则往右移动一位,变为00100000.

需要注意的是也有一个特殊的情况,这是最令人困惑的

考虑以下两条语句

char a=0x80   //10000000

char b=a<<1>>1;//将a左移一位,再右移一位,赋值给b;

按道理,先左移一位变为00000000,再右移一位应该是00000000

但实际上,b会是10000000

 

但是还是下面的三条语句,情况就会有不同,

char a=0x80

char b=a<<1;

b=b>>1;

这个时候b就会是我们预料的00000000.

 

以上就是所有我们需要注意的事项

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值