Java中的八种基础数据类型是我们日常一直在使用中,这篇文章就用来复习和巩固该基础知识。
一、详解
基本类型 | 字节 | 区间 | 默认值 |
---|---|---|---|
byte(位) | 1字节=8bits | -128~127 | 0 |
short(短整数) | 2字节=16bits | -32768~32767 | 0 |
int(整数) | 4字节=32bits | -2147483648~2147483647 | 0 |
long(长整数) | 8字节=64bits | -9223372036854774808~9223372036854774807 | 0 |
float(单精度) | 4字节=32bits | 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方) | 0 |
double(双精度) | 8字节=64bits | 1.797693e+308~ 4.9000000e-324 | 0 |
char(字符) | 2字节=16bits | 0~65535 | 空 |
boolean(布尔值) | 1字节=8bits | ture~false | false |
二、取值区间的计算方法(以1byte为例)
方便理解,可以通过如下三种来网上的方式来进行理解区间的计算。
(1)方式一:
因为1byte表示256个数(用一个字节(8位)表示出来(2^8=256)),所以有人将其拆开正负各一半,即-128~127(这个是127而不是128是因为0也是正数啊,所以划分后128变127了)。
(2)方式二:
1111 1111表示的是-1,而不是-128;
首先,因为要表示出负数,所以它的最高位是符号位。0表示正数,1表示负数;如:127是0111 1111这样表示的。-128是1000 0000这样表示的。127后面是-128,最大的正数加下来是最小的负数。这就跟钟表一样,12点钟后面是1点中钟一样。因为它是用补码的编码方式。
正数的补码就是它的原码,也就是单纯的二进制数。负数的话,看下面例子:
1111 1111这个二进制串,首先它最高位是1,明确他是个负数。那么其余位是111 1111,按位取反得到:000 0000,再加1就是:000 0001也就是1,再加上符号位。最终结果是-1。
(3)方式三:
你可以这样想,第一位符号位我们暂时不去考虑,那么剩下的七位组成的最小值为多少?就是000,0000,这时将符号位添加1000,0000不就是最小的数了(因为1是负号啊),这时转化为十进制得出-128。
基本数据类型也会涉及到一些转换的问题,可查阅我如下的几篇文章进行学习:
《Java中的隐式类型转换和显式类型转换》
《二进制、八进制、十六进制和十进制的相互转换》
《原码、补码、反码概念及相互转换问题》
不负时光,时光定不负你。