一个JAVA的小问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 16:47:41
package com.px04;

public class URShift {
public static void main(String[] args) {
int i = -1;
i >>>= 10;
System.out.println(i);
long l = -1;
l >>>= 10;
System.out.println(l);
short s = -1;
s >>>= 10;
System.out.println(s);
byte b = -1;
b >>>= 10;
System.out.println(b);
}
}

这个返回的是什么值啊,为什么,请详细说明一下,我是个小菜~
那么数字 是怎么变成电脑1111111,又000111111的

“>>> 无符号右移”是位操作的一种
这种'移位'运算只能用于整数类型.(byte,char,short在移位之前自动转为Int,而long转完还是long)
>>>右移,使用"零扩展",不论正负,都在最高位不断插入'0',这是C/C++没有的.

(更多详细信息请参见<<Thinking in Java>>)

无符号右移的概念是:
------------------------------------------------------
移位运算符

包括:
“>> 右移”;“<< 左移”;“>>> 无符号右移”

例子:
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1111
其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。

-5<<3=-40
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1101 1000
其结果与 -5*2*2*2 完全相同。

5>>3=0
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0000
其结果与 5/(2*2*2) 完全相同。

5<<3=40
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0010 1000
其结果与 5*2*2*2 完全相同。