Java中的 ">>>" 是什么意思?

3

我正在尝试将这段代码翻译成Python,但是我很难做到,不用担心索引值和变量名,我只想知道">>>"部分的确切作用,或许有Python等效的方法,但解释一下会更好:

我正在尝试将这段代码翻译成Python,但是我很难做到,不用担心索引值和变量名,我只想知道">>>"部分的确切作用,或许有Python等效的方法,但解释一下会更好:

target[0] = (char)(source[sourceIndex] >>> 2);
target[1] = (char)((source[sourceIndex] & 3) << 4 | source[sourceIndex + 1] >>> 4);
target[2] = (char)((source[sourceIndex + 1] & 0xf) << 2 | source[sourceIndex + 2] >>> 6);
target[3] = (char)(source[sourceIndex + 2] & 0x3f);

非常感谢您的帮助


2
在谷歌上搜索“>>>”很困难。 - theomega
2
@Eels:这有点不公平,因为可能并不明显正确的搜索是“Java运算符”,而不是像“java >>>”这样的内容。 - Russell Zahniser
2
我不知道这个叫什么,所以在谷歌上搜索“java >>>”根本没有返回任何有用的结果。 - Ole
2
可能是>>>和>>之间的区别的重复问题。 - aioobe
3个回答

10

这是一种“无符号右移”。

因此,如果您的数字(x)是11110000(二进制表示)。

x >>> 1将得到01111000(二进制表示)。

相比之下,x >> 1的结果是11111000(二进制表示)。

>>试图保留“符号位”,但>>>不会保留符号位。

注意:我假设整数为8位(Java中的byte)。对于2字节和4字节的整数,情况也是一样的。


8
"<<<"和">>"都是位移运算符,具体而言,
有符号左移位运算符"<<"将一个二进制数向左移动一定的位数,有符号右移位运算符">>"将一个二进制数向右移动一定的位数。左操作数给出了二进制数,右操作数给出了需要移动的位数。无符号右移位运算符">>>"在最左侧插入零,而">>"后最左侧的位置则取决于符号扩展。
——摘自Java™教程-位运算符和位移运算符

1
你的意思不是 "<<" 和 ">>>" 是位移运算符吗? - Martijn Courteaux

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接