【发布时间】:2017-10-23 23:00:10
【问题描述】:
我正在尝试理解按位和移位运算符。我写了一个简单的代码来显示短类型的位。
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 位。 谢谢。
【问题讨论】:
-
你是怎么想到
2147483648L和32768的? -
如果您想使用位,请不要使用像
32768或2147483648L这样的十进制文字。请改用0x8000或1 << 14。并使用>>和<<而不是/2和*2。这将使意图更清晰