右移位,右移位

各位不要笑我,我真是刚刚才发现这个问题.以前都没有用过这个运算符的......真的
char i = 0x14;
i >> 1
的值是多少?当然是0xA
因为
char 有8位,那么0x14的二进制表示就是0001 0100, 右移1位,就是0000 1010 也就是0xA啦
那么如果
char i = 0x90;
i >> 1
的值又是多少呢?
0x90 即1001 0000右移一位,是0100 1000 即0x48 吗?
不是呀...我真是惊讶,表达式的结果是0xC8即1100 1000 .翻翻我当年的C语言初级教材,高位补全的应该是补0嘛,这里却补了1 .真是奇怪.
问了问曾永红大哥,才知道了答案...原来就是算术位移和逻辑位移的区别.
两种移位方式:
逻辑右移:不管最左边一位是0还是1,都补0.
算术右移:右移是按最左边(高位)来补的(即如果是1就补1,如果是0就补0,不改变该位的值)
但是对此,网上还有其他说法,有说算术右移高位是同意补1 的,但是我还没有看到这样的C/C++编译器....
至于刚刚我提到的我的书上使用逻辑右移,这样的编译器我更加没有见到过(小弟才疏学浅,见谅见谅)
当然,左移位都是补0的...

不过现在还好啦,基本上了解了...当时我可是郁闷了好一阵子....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值