移动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特别妥求位移数量应该按照我们前面所讲的求模的方法来计算。
对于一个由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特别妥求位移数量应该按照我们前面所讲的求模的方法来计算。
位移运算与C语言中的数据移动
本文探讨了在C语言中使用位移运算符移动数据时的行为和限制,特别是当位移量超过字长时的情况。文章通过具体示例展示了在不同机器上的实际效果,并强调了位移数量应保持在字长内的必要性。
4612

被折叠的 条评论
为什么被折叠?



