java - 按位运算符代码

标签 java bit-manipulation

<分区>

我正在尝试理解按位运算符和移位运算符。 我写了一个简单的代码来显示短类型的位。

    class Shift {
    public static void main (String args[]) {
        short b = 16384;

        for (int t = 32768; t > 0; t = t/2) {
            if ((b&t) !=0) System.out.print("1 ");
            else System.out.print ("0 ");
        }
        System.out.println();
        b = b+2;
        for (long t = 2147483648; t > 0; t = t/2) {
            if ((b&t) != 0) System.out.print ("1 ");
            else System.out.print ("0 ");
        }
        System.out.println();
    }
}

输出是:

C:\>javac Shift.java
Shift.java:11: error: integer number too large: 2147483648
                for (long t = 2147483648; t > 0; t = t/2) {
                              ^
1 error

我不明白为什么 long 类型不能保存值 2147483648。

感谢您的帮助。

感谢您的回答。 我更改了代码:

    class Shift {
    public static void main (String args[]) {
        short b = 16384;

        for (int t = 32768; t > 0; t = t/2) {
            if ((b&t) !=0) System.out.print("1 ");
            else System.out.print ("0 ");
        }
        System.out.println();
        b = (short)(b+2);
        for (long t = 2147483648L; t > 0; t = t/2) {
            if ((b&t) != 0) System.out.print ("1 ");
            else System.out.print ("0 ");
        }
        System.out.println();
    }
}

现在的输出是:

C:\>java Shift
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0

为什么第二个“for”的输出是一个整数?

最佳答案

根据 JLS #3.10.1. Integer Literals ,

An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell); otherwise it is of type int (§4.2.1).

因此

long t = 2147483648

应该是

long t = 2147483648L

L 字面量告诉编译器它是一个 long 值。否则默认编译器将其视为 int 值。

关于java - 按位运算符代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562589/

相关文章:

java - 如何制作包含 Spring Bean 的 jar,并在 SpringBoot 应用程序中使用它?

c - 位操作 C allEvenBits

java - Netbeans maven-surefire-plugin 不生成 HTML

java - TCP Socket 交换 kryo 序列化对象

java - 传递 Intent 返回的 Uri 时 ContentResolver 中不支持的 Uri

java - 为什么即使表为空,Hibernate 的 DELETE 也会返回 1?

c - C 中的位移位

c++ - 运行时错误: Integer Overflow for Complement Number Problem

c++ - 表达式中意外的整数溢出

java - 在 Android 中保存位图