关于左移右移运算,当要移动的位大于实际的位数时编译器的解决办法

移动k位,这里k很大
对于一个由w位组成的数据类型,如果要移动k;;;' w位会得到什么结果呢?例如,在一个
32位机器上计算下面的表达式会得到什么结果:
int  lval = OxFEDCBA98  <<32;
int  aval = OxFEDCBA98  >>36;
unsigned uval = OxFEDCBA98u >> 40;
C语言标准很小心地规避了说明在这种情况下该如何做。在许多机器上,当移动一个w位
的佳时,移位指令只考虑位移量的低log2w位,因此实际上位移量就是通过计算kmodw得到
的。例如,在一台采用这个规则的32住机器上,上面三个移位运算分别是移动。、4和8位,得
到结果:
lval  OxFEDCBA98
aval  OxFFEDCBA9
uval  OxOOFEDCBA
不过这种行为对于C程序来说是没有保证的,所以移位数量应该保持小于字长。
另一方面!Java特别妥求位移数量应该按照我们前面所讲的求模的方法来计算。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值