一看到你的问题,我也不理解这句话。所以我写了一个简单的程序来看位移操作用的是什么 bytecode :
public class Test {
public static void main(String[] args) {
byte b = 32;
int i = b << 4;
System.out.println(i);
}
}
用 javap 查看编译出来的字节码:
public static void main(java.lang.String[]);
Code:
0: bipush 32
2: istore_1
3: iload_1
4: iconst_4
5: ishl
6: istore_2
7: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
10: iload_2
11: invokevirtual #3 // Method java/io/PrintStream.printl
n:(I)V
14: return
}
Shifts value2 left by the amount indicated in the five low bits of value1
所以我终于明白英文原文里的“right-hand side”指的并不是某个数值的“右端”,“right-hand side”是一个术语,应该翻译成“右操作数”。
Only the five low-order bits of the right-hand side will be used.
这句话可以做这样的理解:位移操作符只用到了它的右操作数的低5位。
我看到这句话的时候就理解成只使用了左操作数的低5位,可能你也是这样理解的。
only the five lowest-order bits of the right-hand operand are used as the shift distance
这里使用“right-hand operand”更明确地表示是右手边的操作数。