按位运算符和循环

Eur*_*oco 0 java bitwise-operators

我试图理解按位和移位运算符.我写了一个简单的代码来向我展示一个短类型的位.

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

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
Run Code Online (Sandbox Code Playgroud)

我使用第二个用于AND的短(16位)和长(64位),输出是32位.我不明白为什么第二个的输出是32位.谢谢.

Era*_*ran 5

你开始循环long t = 2147483648L,这是2 ^ 31.因此,您的循环有32次迭代并打印32位.

如果要显示更多位,请启动循环long t = 0x4000000000000000L;(相当于以01开头并以62 0结尾的二进制数).