class ee
{
public static void main(String[] args)
{
int x=0x80000000;
int y=0x80000000;
int a=15;
int b=15;
int c=31;
int d=31;
int e=15;
a=a>>1;
b=a>>>1;
x=x>>1;
y=y>>>1;
System.out.println("0x80000000>>1="+Integer.toHexString(x));
System.out.println("0x80000000>>>1="+Integer.toHexString(y));
System.out.println("*****************");
System.out.println("15>>1="+Integer.toBinaryString(a));
System.out.println("15>>>1="+Integer.toBinaryString(b));
System.out.println("*****************");
System.out.println("31>>1="+Integer.toBinaryString(c));
System.out.println("31>>>1="+Integer.toBinaryString(d));
System.out.println("e="+Integer.toBinaryString(e));
}
}
运行结果是
0x80000000>>1=c0000000
0x80000000>>>1=40000000
*****************
15>>1=111
15>>>1=11
*****************
31>>1=11111
31>>>1=11111
e=1111
可是为什么"15>>1=111 15>>>1=11"而不是"15>>1=1111 15>>>1=0111"
{
public static void main(String[] args)
{
int x=0x80000000;
int y=0x80000000;
int a=15;
int b=15;
int c=31;
int d=31;
int e=15;
a=a>>1;
b=a>>>1;
x=x>>1;
y=y>>>1;
System.out.println("0x80000000>>1="+Integer.toHexString(x));
System.out.println("0x80000000>>>1="+Integer.toHexString(y));
System.out.println("*****************");
System.out.println("15>>1="+Integer.toBinaryString(a));
System.out.println("15>>>1="+Integer.toBinaryString(b));
System.out.println("*****************");
System.out.println("31>>1="+Integer.toBinaryString(c));
System.out.println("31>>>1="+Integer.toBinaryString(d));
System.out.println("e="+Integer.toBinaryString(e));
}
}
运行结果是
0x80000000>>1=c0000000
0x80000000>>>1=40000000
*****************
15>>1=111
15>>>1=11
*****************
31>>1=11111
31>>>1=11111
e=1111
可是为什么"15>>1=111 15>>>1=11"而不是"15>>1=1111 15>>>1=0111"
b=a> > > 1;
下面那一据写错了
应该是b=b>>>1;
这时虚拟机会先让n对32取模,变成一个绝对值小于32的负数,然后再加上32,直到 n 变成一个正数。比如(k>>>-1) ==> (k>>>31); (k>>-43) ==> (k>>-11) ==> (k>>>21)。
请参考……