当我运行代码时:
public class OperateDemo18{
public static void main(String args[]){
int x = 3 ; // 00000000 00000000 00000000 00000011
int y = -3 ; // 11111111 11111111 11111111 11111101
System.out.println(x>>2) ;
System.out.println(y>>2) ;
}
};
Run Code Online (Sandbox Code Playgroud)
我输出为:
x>>2 is 0
y>>2 is -1
Run Code Online (Sandbox Code Playgroud)
正如我的理解,因为int x = 3,x>>2等于(3/2)/2它是0.75,整数,x>>2是0.
但我不明白为什么int y = -3,y>>2是-1.有人可以解释一下吗?
据我所知,由于int x = 3,x >> 2等于(3/2)/ 2,即0.75,因此对于整数,x >> 2为0.
这并不完全正确; >>是一个bithift操作,没有别的.对正整数的影响是除以2的幂,是的.但是对于无符号整数,它不是:
您方便地提供了y == -3自己的二进制形式:
11111111 11111111 11111111 11111101
Run Code Online (Sandbox Code Playgroud)
让我们把它换成两个!
y == 11111111 11111111 11111111 11111101
y>>2== xx111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
现在,你填写什么x?
Java,就像大多数合理的语言一样,符号扩展,即.它使用原始的最高(最左边)位:
y == 11111111 11111111 11111111 11111101
y>>2== 11111111 11111111 11111111 11111111
Run Code Online (Sandbox Code Playgroud)
不难看出这是"最大"的负整数(记住,负整数表示为"两个补码"!),即-1.