【问题标题】:What does ">>>" in java mean?java中的“>>>”是什么意思?
【发布时间】:2012-02-25 13:04:02
【问题描述】:

我试图将这段代码翻译成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);

任何帮助将不胜感激

【问题讨论】:

  • 在 Google 上很难搜索到 '>>>'。
  • @Eels:这有点不公平,因为正确的搜索是“Java 运算符”而不是“java >>>”之类的东西可能并不明显。
  • 我不知道这叫什么,所以谷歌搜索“java >>>”根本没有返回任何有用的东西。
  • Difference between >>> and >> 的可能重复项

标签: java python


【解决方案1】:

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

所以,如果您的号码 (x) 是 11110000(二进制)。

x &gt;&gt;&gt; 1 将是 01111000(二进制)。

这与x &gt;&gt; 1 相反,后者将导致11111000(二进制)。

&gt;&gt; 尝试保留“符号位”,但 &gt;&gt;&gt; 没有。

注意:我假设一个 8 位整数(或 Java 中的 byte)。 2 字节和 4 字节整数也是如此。

【讨论】:

    【解决方案2】:

    “>”是位移运算符。具体来说,

    有符号左移运算符“>”将位模式右移。位模式由左侧操作数给出,要移位的位置数由右侧操作数给出。无符号右移运算符“>>>”将零移到最左边的位置,而“>>”之后的最左边的位置取决于符号扩展。

    ——来自The Java™ Tutorials - Bitwise and Bit Shift Operators

    【讨论】:

    • 你不是说“>>”是位移运算符吗?
    【解决方案3】:

    这就是无符号右移运算符。这是一个按位运算符,将零移到操作数的最左边。这里 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 2018-05-29
      • 2017-09-03
      相关资源
      最近更新 更多