Java 为什么3>>32等于3?
为什么3右移32等于3而不是0 我在nodeJs和Java中得到了这些结果 3 >> 31 = 0 3 >> 32 = 3 3 >> 33 = 1 3 >> 34 = 0 3 >> 35 = 0Java 为什么3>>32等于3?,java,node.js,bitwise-operators,bit-shift,Java,Node.js,Bitwise Operators,Bit Shift,为什么3右移32等于3而不是0 我在nodeJs和Java中得到了这些结果 3 >> 31 = 0 3 >> 32 = 3 3 >> 33 = 1 3 >> 34 = 0 3 >> 35 = 0 这是Java语言规范的一部分。对右侧操作数进行包装,使其始终在0位范围内,其中位是左侧操作数的位数。由于要移位32位整数,因此右侧操作数将在0到31之间换行。32变为0,33变为1等 见: 如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受位逻辑AND运
这是Java语言规范的一部分。对右侧操作数进行包装,使其始终在0位范围内,其中位是左侧操作数的位数。由于要移位32位整数,因此右侧操作数将在0到31之间换行。32变为0,33变为1等 见: 如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受位逻辑AND运算符&§15.22.1,掩码值为0x1f 0b11111。因此,实际使用的移动距离始终在0到31之间(包括0到31)
这是Java语言规范的一部分。对右侧操作数进行包装,使其始终在0位范围内,其中位是左侧操作数的位数。由于要移位32位整数,因此右侧操作数将在0到31之间换行。32变为0,33变为1等 见: 如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受位逻辑AND运算符&§15.22.1,掩码值为0x1f 0b11111。因此,实际使用的移动距离始终在0到31之间(包括0到31)
C++不是NoDEJS和java。这是未定义的行为。没有移位值的运行时检查,并且移位大于32的值取决于处理器行为。所以对于语言来说,它是未定义的行为。最可能的情况是,指令字段中只有5位用于指定移位,并且只保留移位值的5 LSB。所以>>32相当于>>0,>>33相当于>>1,依此类推。向左移位的情况也一样,看起来像是循环移位:int32的长度是32。对于大于或等于32的移位,会发生类似的情况:val>>移位%32。对于32,它将是0和3>0=3,33的移位将是33% 32=1~3 3>1=1。C++不是NoDEJS和java。这是未定义的行为。没有移位值的运行时检查,并且移位大于一个值,取决于处理器行为。所以对于语言来说,它是未定义的行为。最可能的情况是,指令字段中只有5位用于指定移位,并且只保留移位值的5 LSB。所以>>32相当于>>0,>>33相当于>>1,依此类推。向左移位的情况也一样,看起来像是循环移位:int32的长度是32。对于大于或等于32的移位,会发生类似的情况:val>>移位%32。对于32,它将是0和3>>0=3,对于33,移位将是33%32=1->3>>1=1。