当前位置:网站首页 > Java基础 > 正文

java二进制基础



先来看一段简单的代码

 

打印结果如下:

 

为什么会出现这种诡异的答案呢?

这还得从浮点数的二进制表示方法说起

这年头儿,连过马路的老奶奶估计都知道,计算机是采用二进制计数的

来,简单的考你一下:请把数字15写成二进制的形式

 

相信你对整数的二进制已经比较熟悉

但如果我换成小数呢?3.该怎么表示?

其实,如果不搞底层设计,一般人还真的不太知道这个答案

但你只有理解小数在二进制中是如何表示的

才能够明白文章开头的案例【为什么0.1+0.2不等于0.3?】

我们以小数0.1为例,看看它是如何使用二进制存储的

 

下图展示了计算的过程 ↓

整数部分竖着连起来就是转换后的二进制

最终的二进制,就是整数部分的合集

写出来大概是这样:

 

可以看到,1001 的部分,是无限循环的

我们用二进制的小数把它写出来大概是这样

 

它相当于

你会发现,它并不等于0.1

它只是一个近似值

所以,二进制保留的位数越多,精度也就越高

直到IEEE 754 标准出现后,计算机才能处理浮点数

根据IEEE 754 标准,float类型,共4个字节,32个bit位

其中指数部分占8位,小数部分占23位

那么指数部分小数部分分别用来保存什么呢?

我们依然以 数字 0.1 为例,我们刚才已经得到了它的二进制

 

按照IEEE 754标准,我们需要把它的小数点,向右移动

直到整数部分是1为止

 

最终变成

float小数部分职能保存23位

-4 就是 指数部分

1001......就是 小数部分

小数点的位置不是固定的,而是浮动的,故名:浮点数

了解到这一点,java二进制基础你就能够接受更多看起来奇怪而有趣的现象

比如

 

f1还原为10进制,结果为0.0

d1还原为10进制,结果为0.000000000

关于二进制的底层,还有很多问题,有待我们探索

多了解一点,就少一些困惑

  • 上一篇: java基础190讲
  • 下一篇: 基础java面试
  • 版权声明


    相关文章:

  • java基础190讲2025-04-21 21:26:02
  • java技术基础题2025-04-21 21:26:02
  • java基础系列232025-04-21 21:26:02
  • java基础的数组2025-04-21 21:26:02
  • java基础测试2025-04-21 21:26:02
  • 基础java面试2025-04-21 21:26:02
  • java基础判断2025-04-21 21:26:02
  • java编程基础习题2025-04-21 21:26:02
  • java编程基础培训班2025-04-21 21:26:02
  • 大学java打基础2025-04-21 21:26:02