按位运算符和 for 循环
Bitwise operators and for loop
我正在尝试了解按位运算符和移位运算符。我写了一个简单的代码来显示短类型的位。
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
我将第二个与短(16 位)和长(64 位)的 AND 一起使用,输出为 32 位。
我不明白为什么第二个 for 的输出是 32 位的。
谢谢。
您从 long t = 2147483648L
开始循环,即 2^31。因此,您的循环有 32 次迭代并打印 32 位。
如果你想显示更多的位,从long t = 0x4000000000000000L;
开始循环(相当于二进制数从01开始到62个0结束)
我正在尝试了解按位运算符和移位运算符。我写了一个简单的代码来显示短类型的位。
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
我将第二个与短(16 位)和长(64 位)的 AND 一起使用,输出为 32 位。 我不明白为什么第二个 for 的输出是 32 位的。 谢谢。
您从 long t = 2147483648L
开始循环,即 2^31。因此,您的循环有 32 次迭代并打印 32 位。
如果你想显示更多的位,从long t = 0x4000000000000000L;
开始循环(相当于二进制数从01开始到62个0结束)