C++ 移位运算符<<
不循环。例如,如果您这样做:
// C++
int a = 1;
cout << (a<<38);
你得到 0。但是,在 Java 中,你实际上循环并得到有效值 64。
我需要将一些 C++ 代码转换为 Java,那么我应该使用什么作为等效的<<
?
The Java语言规范 http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19 states:
如果左侧操作数的提升类型为 int,则只有 5 个
右侧操作数的最低位用作移位
距离。就好像右边的操作数受到了
按位逻辑 AND 运算符 & (§15.22.1),掩码值为 0x1f
(0b11111)。因此,实际使用的移位距离始终在
范围 0 到 31(含)。
如果左侧操作数的提升类型很长,则只有
右侧操作数的六个最低位用作移位
距离。就好像右边的操作数受到了
按位逻辑 AND 运算符 & (§15.22.1),掩码值为 0x3f
(0b111111)。因此,实际使用的移位距离始终为
范围 0 到 63(含)。
所以,在你的例子中,(int)(((long)a)<<38)
应该管用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)