【问题标题】:Bitwise operators code [duplicate]位运算符代码[重复]
【发布时间】:2015-09-14 10:30:16
【问题描述】:

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

    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”的输出是整数?

【问题讨论】:

  • long t = 2147483648l

标签: java bit-manipulation


【解决方案1】:

根据JLS #3.10.1. Integer Literals

如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则它是 long 类型;否则它是 int 类型(§4.2.1)。

因此

long t = 2147483648

应该是

long t = 2147483648L

L 文字告诉编译器它是一个长值。否则默认编译器会将其视为int 值。

【讨论】:

  • 谢谢。我改变了它并且它起作用了。但输出是: 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 为什么第二行的输出是int?
【解决方案2】:

2147483648int 文字,对于 int 来说太大了。将其更改为 2147483648L 以获得 long 文字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多