- 拿byte类型做栗子
一个字节是8位二进制数,然后最高位会用来作为符号位。正数计算机是存的原码,负数是存的补码。
也就说byte正数最大是0111 1111,转化为十进制是:127(这就是byte的上限)
byte能存储的最小负数,首先要知道计算机存储负数是用的负数的补码,所以说最小负数对应的不是1111 1111,而是 1000 0000,要得到其原码,首先是对000 0000(补码)减1得到 111 1111,然后取反得到 000 0000(原码),最高位符号位不动,所以最小的负数是1000 0000,负0,这个负0是最小的负数可能有点疑惑,那我们再来看一下第二小的负数1000 0001,它其实是 1111 1111的补码,即表示的-127,然后再来看一下1111 1111,它其实是-1的补码,即最大的负数。
也就说byte字节可以表示的范围是
0、1、…、126、127、-0、-127、-126、…、-1。
与之对应的是正数表示是
0、1、…、126、127、128、129、130、…、255。
验证一下:
public static void main(String[] args) {
byte b1 = 127;
System.out.println((byte)(b1 + 1));
}
计算机并没有正负0的说法,所以将-0表示为-128,所以byte的取值范围是-128~127
正数有0~127共128位,负数是-1至-128也是128位,本质上就是两种可能对应的高位符号位的01正负之分。
其他的整形以此类推。
- Java基本数据类型的取值范围