java 整形数

132 阅读2分钟

一个字面量的值到底是多少

同样的二进制位表示,以不同的方式被翻译成不同的值,如下:

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