Java基本数据类型详解(为什么byte的范围是-2^7 ~ 2^7-1?)

Posted 糠猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基本数据类型详解(为什么byte的范围是-2^7 ~ 2^7-1?)相关的知识,希望对你有一定的参考价值。

Java基本数据类型详解(为什么byte的范围是-2^7 ~ 2^7-1?)

Java中有哪些数据类型?

  1. 基本数据类型

    byte(-2^7 ~ 2^7-1,占用一个字节)

    short(-2^15 ~ 2^15-1,占用两个字节)

    char(用于存放字符,占用两个字节)

    int(-2^31 ~ 2^31-1,占用四个字节)

    long(-2^63 ~ 2^63-1,占用八个字节)

    float(-2^7 ~ 2^7-1,占用四个个字节)

    double(-2^7 ~ 2^7-1,占用八个字节)

  2. 引用数据类型

byte范围为什么不是-2^8 ~ 2^8?

我们都知道计算机底层用二进制的形式存储数据,但是计算机存储一个数字并不是直接存储该数字对应的二进制数字,而是存储其对应的二进制数字的补码。

什么是原码,反码,补码?

原码,反码,补码是计算机对数字的二进制表示方法。

原码:将最高位作为符号位(0为正,1为负),其余位数用来表示此数字绝对值的大小。

反码:如果是正数,与原码相同;如果是负数,符号位不变,其余位取反。

补码:如果是正数,与原码相同;如果是负数,则将数字的反码加上1。

例如:

数值 原码 反码 补码
6 0000 0110 0000 0110 0000 0110
-6 1000 0110 1111 1001 1111 1010

如果符号位是0,那么取值范围应该是0127,同样的,如果符号位是1,那么取值范围应该是-0-127。这里有意思的是-0,原码位1000 0000,补码为(1)0000 0000,有一位溢出。0的补码也是0000 0000,和-0是一样的,因此我们认为-0是没有什么意义的。同时规定1000 0000是-128的补码,这是以一种数码结合的形式,符号位也是数值位。因此byte的曲子范围是-128~127其他数据类型的取值范围的原理也是如此。

Java数据类型之间的转换

类型转换时需要注意几条规则:

  1. 不能对布尔值进行转换
  2. 高容量转换成低容量时,需要强制类型转换(可能出现内存溢出的问题)
  3. 低容量转换成高容量时,自动类型转换

基本数据类型容量的高低(有低到高)

byte < short < char < int < long < float < double

(以下几个问题会在其他随笔中详解)

计算机存储数值为什么使用补码?

字符类型char和几种经典编码表详解

关于Java实数(float,double)详解(为什么float的容量比long高?)

以上是关于Java基本数据类型详解(为什么byte的范围是-2^7 ~ 2^7-1?)的主要内容,如果未能解决你的问题,请参考以下文章

java中的基本数据类型简谈

Java byte 类型的取值范围是-128~127

java基本数据类型取值范围

Java学习笔记:数据类型与变量

JAVA中byte类型的介绍。 谢谢

DELPHI 中BYTE类型