Java 转换类型位大小

Java 转换类型位大小,java,bit-manipulation,bit-shift,Java,Bit Manipulation,Bit Shift,我在玩换档,我遇到了一个问题: int maxint = Integer.MAX_VALUE; LOG.debug("maxint << 31 ---> {} ({})", maxint << 31 , Integer.toBinaryString(maxint << 31 )); LOG.debug("maxint << 32 ---> {} ({})", maxint << 32 ,

我在玩换档,我遇到了一个问题:

    int maxint = Integer.MAX_VALUE;
    LOG.debug("maxint <<  31  --->  {} ({})", maxint << 31 , Integer.toBinaryString(maxint << 31 ));
    LOG.debug("maxint <<  32  --->  {} ({})", maxint << 32 , Integer.toBinaryString(maxint << 32 ));
    LOG.debug("maxint <<  33  --->  {} ({})", maxint << 33 , Integer.toBinaryString(maxint << 33 ));
int maxint=Integer.MAX\u值;
LOG.debug(“maxint{}({})”,maxint

如果左侧操作数的提升类型为int,则只有五个 右操作数的最低阶位用作移位 距离。这就好像右侧操作数受到 掩码值为0x1f的位逻辑与运算符&(§15.22.1) (0b11111)。因此,实际使用的换档距离始终在 范围为0到31,包括0到31

和六位长。这个行为也允许,通常在C和C++中实现,虽然在java中不是必需的。< /P>


还有我第一次搜索遗漏的重复项。

轮班工作模式32
a小心。这只适用于正数。
-1%32=-1
maxint <<  31  --->  -2147483648 (10000000000000000000000000000000)
maxint <<  32  --->  2147483647 (1111111111111111111111111111111)
maxint <<  33  --->  -2 (11111111111111111111111111111110)
    int minInt = -2147483648;
    LOG.debug("minInt <<  1 --->  {} ({})", minInt << 1 , Integer.toBinaryString(minInt << 1 ));
    LOG.debug("minInt <<  2  ---> {} ({})", minInt << 2 , Integer.toBinaryString(minInt << 2 ));
minInt  <<  1 --->  0 (0)
minInt  <<  2  --->  0 (0)