C++移位运算符<<不循环.例如,如果你这样做:
// C++
int a = 1;
cout << (a<<38);
Run Code Online (Sandbox Code Playgroud)
你得到0.但是,在Java中你实际上是循环并获得64的有效值.
我需要将一些C++代码翻译成Java,那么我使用什么作为等价物<<呢?
在Java语言规范状态:
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
如果左侧操作数的提升类型很长,则只使用右侧操作数的六个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x3f(0b111111)的影响.因此,实际使用的移位距离始终在0到63的范围内,包括0和63.
所以,在你的例子中,(int)(((long)a)<<38)应该工作.
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |