先科普计算机基础。
byte是一个字节,有8个位(bits),即8个0、1。
8位的第一个位是符号位,
也就是说一个byte能代表最大的正数为 0111 1111,为127.
一个byte能代表的最大负数为1000 0000,为-128.
那你知道1111 1111代表的多少吗,你以为是255? 错误的,是-1。
这里就要普及几个概念。
原码,反码与补码。
原码: 一个整数按照绝对值大小转化成的二进制数为原码。
22原码就是 0000 0000 0000 0000 0000 0000 0001 0110
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
22反码就是 1111 1111 1111 1111 1111 1111 1110 1001
补码:反码加1称为补码。
22补码就是 1111 1111 1111 1111 1111 1111 1110 1010
也就是十六进制的0xFFFFFFEA。也就是-22.
Java各个类型的占位
int数据类型:byte(8bit ,-128~127) short(16 bit) int(32 bit) long(64 bit)
float数据类型: 单精度(32 bit float)、双精度(64 bit double)
char数据类型:unicode字符(16位)
float数据类型: 单精度(32 bit float)、双精度(64 bit double)
char数据类型:unicode字符(16位)
下面简单介绍下每种类型最大值是怎么来的。
看上面知道 byte 为 8 bit ,bit是由0与1组成,而首位标识正负,所以byte最大值为 0111 1111,为127.
而int 为 4个byte ,为32bit , 所以 int最大值为 0111 1111 1111 1111 1111 1111 1111 1111.
同理,其他都是这么计算.