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>
还有我第一次搜索遗漏的重复项。轮班工作模式32a小心。这只适用于正数。-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)