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中有哪些数据类型?
-
基本数据类型
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,占用八个字节)
-
引用数据类型
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数据类型之间的转换
类型转换时需要注意几条规则:
- 不能对布尔值进行转换
- 高容量转换成低容量时,需要强制类型转换(可能出现内存溢出的问题)
- 低容量转换成高容量时,自动类型转换
基本数据类型容量的高低(有低到高)
byte < short < char < int < long < float < double
(以下几个问题会在其他随笔中详解)
计算机存储数值为什么使用补码?
字符类型char和几种经典编码表详解
关于Java实数(float,double)详解(为什么float的容量比long高?)
以上是关于Java基本数据类型详解(为什么byte的范围是-2^7 ~ 2^7-1?)的主要内容,如果未能解决你的问题,请参考以下文章