但是,如果b为负数,在运行时是否应该出错?
不符合Java语言规范第15.19节的规定:
如果左侧操作数的提升类型为int,则仅将右侧操作数的最低5位用作移位距离。就像右侧操作数受到掩码值0x1f(0b11111)的按位逻辑AND运算符&(§15.22.1)一样。因此,实际使用的移动距离始终在0到31(含)范围内。
因此,-32的偏移实际上以0的偏移结束,而-49的偏移实际上以15的偏移结尾-因此,您看到了结果。

但是,如果b为负数,在运行时是否应该出错?
不符合Java语言规范第15.19节的规定:
如果左侧操作数的提升类型为int,则仅将右侧操作数的最低5位用作移位距离。就像右侧操作数受到掩码值0x1f(0b11111)的按位逻辑AND运算符&(§15.22.1)一样。因此,实际使用的移动距离始终在0到31(含)范围内。
因此,-32的偏移实际上以0的偏移结束,而-49的偏移实际上以15的偏移结尾-因此,您看到了结果。