正如标题中所要求的那样.
我知道1L << 3 = 8,长类型是64位.67 - 64 = 3.但为什么1L << 67还有同样的效果1L << 3呢?为什么不发生"比特溢出"之类的事情?
是否有任何文档定义此行为?谢谢.
来自https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19
如果左边的操作数的提升的类型是长,则仅右边的操作数的六个最低阶位被用作移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x3f(0b111111)的影响.因此,实际使用的移位距离始终在0到63的范围内,包括0和63.
所以, 67 & 0x3f = 3
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |