我试图理解按位和移位运算符。我写了一个简单的代码来向我展示一个短类型的位。
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
我使用第二个用于AND的短(16位)和长(64位),输出是32位。 我不明白为什么第二个的输出是32位。 谢谢。
答案 0 :(得分:5)
您使用long t = 2147483648L
启动循环,即2 ^ 31。因此,你的循环有32次迭代并打印32位。
如果您希望显示更多位,请使用long t = 0x4000000000000000L;
(相当于以01开头并以62 0结尾的二进制数)开始循环。