java - 为什么Java不能正确计算逻辑右移?

标签 java byte bitwise-operators bit bit-shift

我刚刚了解了逻辑右移。为什么我的java计算不正确? 示例:

public class Operators {

    public static void main(String[] args) {
        byte z = -16;
        System.out.println((z >>> 2));
    }    
}

为什么Java输出:1073741820

-16 = 1111 0000
-16 >>> 2 = 0011 1100 = 60

感谢您的帮助:)

最佳答案

无符号右移运算符>>>不使用符号位来填充尾随位置。它始终用 0 填充尾随位置。

public class Main {
    public static void main(String[] args) {
        String s = "00000000000000000000000000000000";
        byte z = -16;
        System.out.println("z in decimal: " + z + ",              binary: " + s.substring(Integer.toBinaryString(z).length())
                + Integer.toBinaryString(z));
        System.out.println("z >>> 1 in decimal: " + (z >>> 1) + ", binary: "
                + s.substring(Integer.toBinaryString(z >>> 1).length()) + Integer.toBinaryString(z >>> 1));
        System.out.println("z >>> 2 in decimal: " + (z >>> 2) + ", binary: "
                + s.substring(Integer.toBinaryString(z >>> 2).length()) + Integer.toBinaryString(z >>> 2));
    }
}

输出:

z in decimal: -16,              binary: 11111111111111111111111111110000
z >>> 1 in decimal: 2147483640, binary: 01111111111111111111111111111000
z >>> 2 in decimal: 1073741820, binary: 00111111111111111111111111111100

关于java - 为什么Java不能正确计算逻辑右移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60423284/

相关文章:

java - X11 转发影响 Java Swing GUI 下拉列表 - 项目不可选择,菜单立即折叠

java - 用JDK1.7编译,在JRE 1.8中运行 : possible to install security patches?

Java数据建模: Use Map or List to build one to many relationship

java - 在 Amazon s3 中下载批量对象

performance - 内置追加与 bytes.Buffer 写入

php - 在一个 MySQLi 查询中对一列执行两次按位操作?

java - 将一组字符串转换为 byte[] 数组

perl - 没有for循环的unpack()

algorithm - 在大型集合中有效地找到具有低汉明距离的二进制字符串

c - 为什么输出为负(使用按位非)