Java中的>>>和>>操作符有什么区别?
当前回答
>> Signed right shift
>>> Unsigned right shift
例子:-
byte x, y; x=10; y=-10;
SOP("Bitwise Left Shift: x<<2 = "+(x<<2));
SOP("Bitwise Right Shift: x>>2 = "+(x>>2));
SOP("Bitwise Zero Fill Right Shift: x>>>2 = "+(x>>>2));
SOP("Bitwise Zero Fill Right Shift: y>>>2 = "+(y>>>2));
输出将是:-
Bitwise Left Shift: x<<2 = 40
Bitwise Right Shift: x>>2 = 2
Bitwise Zero Fill Right Shift: x>>>2 = 2
Bitwise Zero Fill Right Shift: y>>>2 = 1073741821
其他回答
>>是算术右移,>>>是逻辑右移。
在算术移位中,符号位被扩展以保持数字的有号性。
例如:用8位表示的-2将是11111110(因为最高位的权值为负)。用算术移位向右移动一位,就会得到11111111,或者-1。然而,逻辑右移并不关心该值是否可能表示有符号的数字;它只是把所有东西都移到右边,然后从左边填上0。使用逻辑移位将-2右移一位将得到01111111。
>> Signed right shift
>>> Unsigned right shift
例子:-
byte x, y; x=10; y=-10;
SOP("Bitwise Left Shift: x<<2 = "+(x<<2));
SOP("Bitwise Right Shift: x>>2 = "+(x>>2));
SOP("Bitwise Zero Fill Right Shift: x>>>2 = "+(x>>>2));
SOP("Bitwise Zero Fill Right Shift: y>>>2 = "+(y>>>2));
输出将是:-
Bitwise Left Shift: x<<2 = 40
Bitwise Right Shift: x>>2 = 2
Bitwise Zero Fill Right Shift: x>>>2 = 2
Bitwise Zero Fill Right Shift: y>>>2 = 1073741821
右移逻辑运算符(>>> N)将位右移N位,丢弃符号位,并用0填充最左边的N位。例如:
-1 (in 32-bit): 11111111111111111111111111111111
>>> 1操作后:
2147483647: 01111111111111111111111111111111
右移算术运算符(>> N)也将位右移N位,但保留符号位并将最左边的N位填充为1。例如:
-2 (in 32-bit): 11111111111111111111111111111110
>> 1操作后变为:
-1: 11111111111111111111111111111111
>>(签名)将给你不同的结果为8 >> 2,-8 >> 2。
右移8
8 = 1000(二进制)
执行2位右移
8 >> 2:
1000 >> 2 = 0010(相当于2)
右移-8
8 = 1000(二进制)
1的补码= 0111
2的补充:
0111 + 1 = 1000
符号位= 1
执行2位右移(对2的co结果)
8 >> 2:
1000 >> 2 = 1110(相当于-2)
>>(unsigned)将给你相同的结果为8 >>> 2,-8 >>> 2。
8的无符号右移
8 = 1000
8 >>> 2 = 0010
无符号右移-8
Minus 8 is 1,000
-8 >>> 2 = 0010
它们都是右移,但是>>>是无符号的
从文档中可以看到:
无符号右移运算符“>>>”将0移到最左边的位置,而“>>”之后的最左边位置取决于符号扩展。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap