Java的基本数据类型

一、Java的基本数据类型

java是一种强类型的语言,在java中一共有8种基本数据类型。

在这里插入图片描述

二、各种类型的存储容量以及取值范围

首先要了解计算机存储方式,字节bit是计算机信息技术用于计量存储容量和传输容量的一种计量单位,也是计算机的磁盘存储的最小单位,1个字节等于8位二进制。
在这里插入图片描述

三、为什么byte类型的127 +1会变成-128

计算机对于二进制数据的存储形式(以byte类型为例)

原码:45:00101101 -45:10101101
在最高位代表符号位区分正数还是负数,0代表正数,1代表负数
反码:45:00101101 -45:11010010
正数的原码和反码相同,负数的反码等于原码的符号位不变,其余各位按位取反
补码:45:00101101 -45:11010011
正数的原码反码和补码都形同,负数的补码等于在其反码基础上末尾+1
首先计算机对于二进制数据,采取补码存储,补码又是由反码来的。
反码:是为了解决计算机处理减法运算。在做减法运算的时候,可以认为是加上一个负数,这样可以减少计算机电路的复杂度。而有原码直接进行运算会出现错误,因此反码诞生。
1-1=1+(-1)=[00000001]原+[10000001]原=[10000010]原=-2 (符号位也参与运算)与实际结构不符
1-1=1+(-1)=[00000001]原+[10000001]原=[00000001]反+[11111110]反=[11111111]反=[10000000]原=-0
可以看到的是,通过反码,我们可以计算出正确结果,但会多出一个±0。因此为了解决±0,问题补码诞生。
总结:反码是为了解决减法运算,补码是为了解决反码产生的±0的问题。
正数:原码,反码,补码一样,负数,反码等于原码取反,符号位不变,补码等于反码加1

回到最初的问题+127:0111 1111、加上+1:0000 0001、等于1000 0000也就是现在的规定的-128。
设计成这样也是为了方便计算机的计算(存储格式为补码)

浮点类型以及精度丢失问题

浮点类型存储方式

在这里插入图片描述

精度丢失问题

public class SimpleTest {
    public static void main(String[] args) {
    	System.out.println(1.2 - 1);
    }
}
```输出的结果会是0.19999999
我们来将10进制的0.2转化为2进制进行存储
 算法是乘以2直到没有了小数为止
                       0.2 * 2 = 0.4            取整数部分 0
                       0.4 * 2 = 0.8            取整数部分 0
                       0.8 * 2 = 1.6            取整数部分 1
                       0.6 * 2 = 1.2            取整数部分 1
                       0.2 * 2 = 0.4            取整数部分 0
                       。。。。。。

0.22进制从上到下可以表示为 00110......

注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。

解决办法

使用BigDecimal类就能解决精度丢失的问题了。

public static void main(String[] args) {
		   BigDecimal b1 = new BigDecimal(Float.toString(1.2f));
		   BigDecimal b2 = new BigDecimal(Float.toString(1));
		   float s = b1.subtract(b2).floatValue(); 
		   System.out.println("s----" + s);
}

四、char类型

用于存储1个字符,经常和它比较的有String类型,不过String类型不属于基本数据类型,属于引用数据类型,可以看作是char类型的数组。

五、boolean类型

只有ture和flase两种类型。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值