天天看点

Java中八种基础数据类型各占多少字节和取值范围

Java中的八种基础数据类型是我们日常一直在使用中,这篇文章就用来复习和巩固该基础知识。

一、详解

基本类型 字节 区间 默认值
byte(位) 1字节=8bits -128~127
short(短整数) 2字节=16bits -32768~32767
int(整数) 4字节=32bits -2147483648~2147483647
long(长整数) 8字节=64bits -9223372036854774808~9223372036854774807
float(单精度) 4字节=32bits 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)
double(双精度) 8字节=64bits 1.797693e+308~ 4.9000000e-324
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中的隐式类型转换和显式类型转换》

《二进制、八进制、十六进制和十进制的相互转换》

《原码、补码、反码概念及相互转换问题》

不负时光,时光定不负你。