Java中的Double Greater Than(>>)?

时间:2009-06-26 20:02:22

标签: java

>>符号在Java中意味着什么?我以前从未见过它,但今天遇到它。我尝试在Google上搜索它,但没有找到任何有用的东西。

7 个答案:

答案 0 :(得分:73)

>>运算符是按位右移运算符。

简单示例:

int i = 4;
System.out.println(i >> 1); // prints 2 - since shift right is equal to divide by 2
System.out.println(i << 1); // prints 8 - since shift left is equal to multiply by 2

负数表现相同:

int i = -4;
System.out.println(i >> 1); // prints -2
System.out.println(i << 1); // prints -8

一般来说 - i << k相当于i*(2^k),而i >> k相当于i/(2^k)

在所有情况下(与任何其他算术运算符一样),您应始终确保不会溢出数据类型。

答案 1 :(得分:37)

这是位移操作符。 Documentation

  

签名左移运算符“&lt;&lt;”   将位模式向左移动,并且   签名的右移运算符“&gt;&gt;”   将位模式向右移动。该   位模式由左手给出   操作数和头寸数量   通过右手操作员转移。   无符号右移运算符   “&GT;&GT;&gt;” 中将零移到最左边   位置,而最左边的位置   在“&gt;&gt;”之后取决于符号扩展。

答案 2 :(得分:15)

它改变了比特......

关于java operators

的一些信息

例如

101  = 5
Shifting out the right "1"
10 = 2
Shifting the other way...
1010 = 10

答案 3 :(得分:6)

右移:

右移位运算符&gt;&gt;将值中的所有位向右移位指定的次数。 其一般形式:值&gt;&gt; NUM 这里,num指定右移值的位置数。也就是说,&gt;&gt;将指定值中的所有位向右移动num指定的位位数。 以下代码片段将值32向右移动两个位置,从而将a设置为8:

int a = 32;
a = a >> 2; // a now contains 8

当某个值具有“移位”的位时,这些位将丢失。例如,下一个代码片段将值35移位到右边两个位置,这会导致两个低位丢失,从而再次将其设置为8.

int a = 35;
a = a >> 2; // a still contains 8

以二进制查看相同的操作更清楚地显示了这种情况:

00100011 35 >> 2
00001000 8

每次将值向右移动时,它会将该值除以2,并丢弃任何余数。你可以利用这个来实现2的高性能整数除法。当然,你必须确保你没有将任何位移到右端。 向右移动时,右移显示的顶部(最左侧)位用顶部位的先前内容填充。这称为符号扩展,用于在向右移动时保留负数的符号。例如,–8 >> 1–4,二进制为

11111000 –8 >>1
11111100 –4

值得注意的是,如果你向右移-1,结果总是保持-1,因为符号扩展会在高位中引入更多的符号。 有时,当您将值向右移动时,不希望对值进行符号扩展。例如,以下程序将字节值转换为其十六进制字符串表示形式。请注意,移位值通过与0x0f进行AND运算来屏蔽,以丢弃任何符号扩展位,以便该值可用作十六进制字符数组的索引。

// Masking sign extension.
class HexByte {
  static public void main(String args[]) {
    char hex[] = {
      '0', '1', '2', '3', '4', '5', '6', '7',
      '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };
  byte b = (byte) 0xf1;
 System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
}
}

以下是此输出:

b = 0xf1

答案 4 :(得分:3)

这是一个正确的位移。

答案 5 :(得分:1)

我相信这是一个有点转变的运营商。如同将所有1和0移动到一个位置右侧。 (我想你可以想象&lt;&lt;&lt; do ... :))

答案 6 :(得分:1)

正如其他人所说,这是正确的位移。你会在许多所谓的“C风格”语言中看到它。

有关您的StackOverflow用户提供的有关位移的详细信息,请查看我很久以前发布的问题,这有助于我最终得到它:Absolute Beginner's Guide to Bit-Shifting。 (发布在那里的人们非常友好地深入讨论这个问题,我希望这对你也有帮助。)