一个字面量的值到底是多少
同样的二进制位表示,以不同的方式被翻译成不同的值,如下:
int a = 0x80000000; // -2147483648,第 31 位的权重对应的是-2^31
long b = 0x80000000; // -2147483648,将 31 位 2 进制拓展为 64 位 2 进制时,为高位补 1
long b = 0x80000000L; // +2147483648,64 位的二进制位,第 31 位的权重位 2^31
逻辑左移是不是和你想的一样
java 中的逻辑左移与计算机组成原理中的逻辑左移表现一致,如下:
short a = 0x4000;
showBinary(a); // 0100 0000 0000 0000
showBinary((short) (a << 1)); // 1000 0000 0000 0000
showBinary((short) (a << 2)); // 0000 0000 0000 0000
showBinary((short) (a << 3)); // 0000 0000 0000 0000
乘法运算是不是和你想的一样
乘法是通过多个逻辑左移的结果相加实现的,所以其表现如下:
short a = 0x4000;
showBinary(a); // 0100 0000 0000 0000
showBinary((short) (a * 2)); // 1000 0000 0000 0000
showBinary((short) (a * 3)); // 1100 0000 0000 0000
showBinary((short) (a * 4)); // 0000 0000 0000 0000
showBinary((short) (a * 5)); // 0100 0000 0000 0000
showBinary((short) (a * 6)); // 1000 0000 0000 0000
showBinary((short) (a * 7)); // 1100 0000 0000 0000
showBinary((short) (a * 8)); // 0000 0000 0000 0000