带负数移位的按位移位运算符
当遇到按位移位运算符" 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