一个JAVA的小问题
来源:百度知道 编辑:UC知道 时间:2024/05/21 16:47:41
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 完全相同。