一、整数的机器码表示 二、浮点数的机器码表示 三、逻辑位运算符 四、移位运算符

1、原码、反码、补码之间的关系

一个正整数,当用原码、反码、补码表示时,符号位都固定为0,用二进制表示的数位值都相同,即三种表示方式完全一样。
一个负整数,当用原码、反码、补码表示时,符号位都固定为1,用二进制表示的数位值都不相同。此时由原码表示法变成补码表示法的规则如下:
(1)符号位为1不变,其余各数值位按位取反得到反码;
(2)符号位为1不变,反码数值位最低位加1,得到补码。

2、Java中整数的机器码表示

在Java中,所有的整数统一以补码的形式存储与运算。
我们知道,Java中的整数类型有byte、short、int、long。
byte类型举例:(下面的原码只是用作参考,在存储和运算时都用的是补码形式)
byte b1 = 10;
原码:00001010
补码:00001000
byte b2 = -10;
原码:10001010
补码:11110110
byte b3 = 127;
原码:01111111
补码:01111111
byte b4 = 0;
原码:00000000(+0);10000000(-0)
补码:00000000
byte b5 = -128;
原码:无法表示
补码:10000000
另外,我们可以看到,如果用原码表示,byte类型的范围为-127~127;
但是用补码表示的话,byte类型的范围为-128~127。
int类型举例:(下面的原码只是用作参考,在存储和运算时都用的是补码形式)
int i1 = 10;
原码:0000000A
补码:0000000A(这里我们用16进制表示,下同)
int i2 = -10;
原码:8000000A
补码:fffffff6
int i3 = 0;
原码:00000000(+0);80000000(-0)
补码:00000000
int i4 = 2147483647;
原码:7fffffff
补码:7fffffff
int i5 = -2147483648;
原码:无法表示
补码:80000000
我们可以通过Integer.toBinaryString(int i)方法查看某个int类型变量的二进制表示。