带负数移位的按位移位运算符

当遇到按位移位运算符" title="移位运算符">移位运算符时,我遇到了一个有趣的场景。如果第二个操作数为负,按位移位运算如何工作?。

即,<< << b,“ <<”将a中的位模式向左移动b位。但是,如果b为负数,在运行时是否应该出错?

我能够成功运行以下代码,但我不知道它是如何工作的?

 public static void bitwiseleftShift(char testChar)

{

int val=testChar-'a';

int result= 1<<val;

System.out.println("bit wise shift of 1 with val="+val+" is "+result);

}

输入项

   bitwiseleftShift('A');// ASCII 65

bitwiseleftShift('0'); // ASCII 48

结果

   bit wise shift of 1 with val=-32 is 1

bit wise shift of 1 with val=-49 is 32768

“ a”的ASCII码为97。有人可以帮助我了解其工作原理吗?

回答:

但是,如果b为负数,在运行时是否应该出错?

不符合Java语言规范第15.19节的规定:

如果左侧操作数的提升类型为int,则仅将右侧操作数的最低5位用作移位距离。就像右侧操作数受到掩码值0x1f(0b11111)的按位逻辑AND运算符&(§15.22.1)一样。因此,实际使用的移动距离始终在0到31(含)范围内。

因此,-32的偏移实际上以0的偏移结束,而-49的偏移实际上以15的偏移结尾-因此,您看到了结果。

以上是 带负数移位的按位移位运算符 的全部内容, 来源链接: utcz.com/qa/406454.html

回到顶部