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。

例如:

数值原码反码补码
60000 01100000 01100000 0110
-61000 01101111 10011111 1010

这是一张表示byte符号位和数值位的图片

如果符号位是0,那么取值范围应该是0 ~ 127,同样的,如果符号位是1,那么取值范围应该是-0~-127。有意思的是-0,原码为1000 0000,补码为10000 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高?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值