java ->>= 和 >>>= 的区别

标签 java

<分区>

我想弄清楚 >>= 和 >>>= 之间的区别。我明白他们在做什么,但我不明白其中的区别。 下面的输出为 38 152 38 152。 按位分配 >>>= 似乎与 >>= 完全相同。

public static void main(String[] args)
{
    int c = 153;
    System.out.print((c >>= 2));
    System.out.print((c <<= 2));
    System.out.print((c >>>= 2));
    System.out.print((c <<= 2));
}

最佳答案

阅读更多关于 Bitwise and Bit Shift Operators 的信息

>>      Signed right shift
>>>     Unsigned right shift

位模式由左侧操作数给出,要移动的位置数由右侧操作数给出。无符号右移运算符 >>> 移到最左边的位置

而在>>之后最左边的位置取决于符号扩展。

简单来说 >>>总是移到最左边的位置>>根据数字的符号移动,即 1 表示负数,0 表示正数。


例如尝试使用负数。

int c = -153;
System.out.printf("%32s%n",Integer.toBinaryString(c >>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c >>>= 2));
System.out.println(Integer.toBinaryString(c <<= 2));

c = 153;
System.out.printf("%32s%n",Integer.toBinaryString(c >>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c >>>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));

输出:

11111111111111111111111111011001
11111111111111111111111101100100
  111111111111111111111111011001
11111111111111111111111101100100
                          100110
                        10011000
                          100110
                        10011000

关于java ->>= 和 >>>= 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418128/

相关文章:

java - 如何将 log4j 添加到使用 OSGI bundle 的 Web 应用程序

java - 使用 A* 算法解决 8 拼图板(Board 数据类型工作正常)

java - 如何检查我是否从java插入数据库

java - 如何为查询创建条件hibernate(len(),PATINDEX(),replace)

Java Merge Sort on Linked List仅在首先添加最小数字时进行排序

java - 从父类(super class)获取返回整数值

java - UnsatisfiedLinkError: 无法从加载程序加载 X

java - ebean java play框架中的约束未反射(reflect)在生成的sql中

java - 如何遍历 iFrame 中的不同框架?

java - 哪个类加载器在 Java 中加载 Array 类?