我对这句话很困惑。我是一个Java程序员,但我对位操作不是很熟悉。
我想我正确地理解了以下几点:
Input : 1 << 10
Output: 0000000000000000000010000000000对于正数,我认为是你移动1乘10位。
令人困惑的是,当我有以下内容时:
int val = -10 (binary representation : 1111111111111111111111111110110 )
Input : 1 << val
Output: 0000000010000000000000000000000 如果有人能用负数解释左移或右移的含义,那就太好了。
发布于 2013-09-12 18:26:47
<< (和其他移位操作符)对于int只占用其右操作数中最不重要的5位,对于long只占用6位,因为将int移位超过31是没有意义的。
在您的例子中,是0b10110 = 22。
因此,1 << (-10)等同于1 << 22。
发布于 2013-09-12 18:30:51
来自JLS,第15.19款
如果左手操作数的提升类型为int,则只使用右边操作数的五个最低阶位作为移位距离。这就好像右边的操作数受到了位逻辑和运算符的影响& (§15.22.1),掩码值为0x1f (0b11111)。因此,实际使用的移位距离总是在0到31之间,包括在内。
换句话说,
1 << -10相当于:
1 << (-10 & 0x1f)..。这就是
1 << 22https://stackoverflow.com/questions/18771704
复制相似问题