opt*_*nal 2 java bit-shift jls
在JLS8的§JLS-15.19中指定
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
我不清楚这个陈述是粗体.非常感谢一个例子.
它是Java利用来自C和C++世界的编译器优化.对于32位int,使用大于或等于31的位移参数将结果值设置为0表示正数int.(对于否定参数,C和C++中关于移位的行为是实现定义的).
实际上在C和C++中,实际上对32位使用大于31的值int实际上是未定义的行为,Java实际上已经明确地定义了行为,并且简单地使用模32的参数执行移位(这是C的大部分内容)和C++编译器实际上).您引用的JLS代码段中明确提到了此方法.
提取数字的最低五位相当于将该数字取模32.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |