移动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特别妥求位移数量应该按照我们前面所讲的求模的方法来计算。