JAVA基础02——JAVA基本数据类型1

JAVA中有八种基本类型:

	四种整型:byte,short,int,long
	两种浮点类型:float,double
	一种字符型:char
	布尔类型:boolean

各个整型和浮点型的存储需求以及取值范围

基本类型说明

原码,反码,补码

原码:
	将一个数值采用二进制的方式表示,得到的就是原码。最高位为符号位,1表示负数,2表示整数。
反码:
	因为计算机只有加法,没有减法,在做减法运算的时候,可以认为是加上一个负数,这样可以减少计算机电路的复杂度。使用原码进行减法运算会出现问题,为了解决减法的问题,计算机引入了反码。
	正数的反码与原码相同;负数的反码是由原码除符号位外,其它位取反,即“0”变成“1”,“1”变成"0"
补码:
	为了解决减法产生的正负零的问题,计算机引入了补码。
	正数的补码与原码相同;负数的补码是由原码除符号为外,其他位取反,加一变换而成,即反码+1

为什么byte类型数值范围是127——(-128)

byte类型的表示数值范围是:-128-127,最高位是符号位,那么怎么能表示-128呢?
	采用数轴的方式表示:
					原码							补码
	-1		1000 0001	,			1111 1111
	-2		1000 0010	,			1111 1110
	-3		1000 0011	,			1111 1101
	.。。。。
	可以看出-2的补码等于-1的补码-1,-3的补码等于-2的补码-1,依次递推,1000 0000是-128的补码,因此,byte的数值范围是-128-127。

浮点类型的精度丢失问题

浮点类型在计算机当中的存储
浮点类型在计算机当中的存储float存储需求是4字节(32位), 其中1位最高位是符号位,中间8位表示阶位,后32位表示值
double存储需求是8字节(64为),其中1位最高位是符号位,中间8位表示阶位,后52位表示值

浮点类型精度的丢失
一个精度丢失的例子:

public class SimpleTest {
    public static void main(String[] args) {
    	System.out.println(1.2 - 1);
    }
}
0.19999999999999996

结果明显出问题了。
将十进制的0.2转化为2进制存储为:0.0011001100110011…是一个无限循环,因此,必定在二进制转化为十进制的过程时会产生误差,必定会有精度丢失。

解决精度丢失问题
JAVA中有一个类,专门解决精度`丢失问题: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);
}

这样得到的结果就是正确的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值