>>>和>>的区别

2022-08-31 04:31:48

和 运算符在 Java 中有什么区别?>>>>>


答案 1

>>是算术向右移位,是逻辑向右移位。>>>

在算术移位中,符号位被扩展以保持数字的有符号性。

例如:以 8 位表示的 -2 将是(因为最高有效位具有负权重)。使用算术移位将其右移一位会得到 ,或 -1。然而,逻辑右移并不关心该值是否可能表示有符号数字;它只是将所有内容向右移动,并从左侧填充0。使用逻辑移位将 -2 向右移动一位将得到 .111111101111111101111111


答案 2

>>>是无符号移位;它将插入 0。 已签名,并将扩展符号位。>>

JLS 15.19 换挡操作员

换挡运算符包括左移位、有符号右移位和无符号右移位。<<>>>>>

的值是带有符号扩展的右移位位置。n>>sns

的值是具有零扩展名的右移位位置。n>>>sns

    System.out.println(Integer.toBinaryString(-1));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >> 16));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >>> 16));
    // prints "1111111111111111"

为了让事情更清楚,添加积极的对应物

System.out.println(Integer.toBinaryString(121));
// prints "1111001"
System.out.println(Integer.toBinaryString(121 >> 1));
// prints "111100"
System.out.println(Integer.toBinaryString(121 >>> 1));
// prints "111100"

由于它是正数,因此有符号和无符号移位都会向最左边的位添加0。

相关问题