当前位置: 首页 > java >正文

从十进制到二进制:深入理解定点数与浮点数表示

从十进制到二进制:深入理解定点数与浮点数表示


1. 十进制正整数与二进制正整数的“位权”概念

位权的本质:基数与幂次

十进制正整数与二进制正整数均采用位置计数法

十进制是以10为底的幂,逢10进1,其权的大小从低到高依次为:10º(1)、10¹(10)、10²(100) ......二进制是以2为底的幂,逢2进1,其权的大小从低到高依次为:2º(1)、2¹(2)、2²(4) ......

最终表示的数值的本质上是 “基数的幂次加权和”

大白话就是:每个数位上的数字与其对应的基数幂次(即“阶”)相乘后累加,得到最终的数值。

十进制示例:(13)₁₀
13 = 1 * 10¹ + 3 * 10⁰↑   ↑      ↑   ↑│   │      │   └── 个位:权重为 10⁰(1)│   │      └───── 数值 3│   └── 十位:权重为 10¹(10)└────── 数值 1
二进制示例:(1101)₂
1101 = 1 * 2³ + 1 * 2² + 0 * 2¹ + 1 * 2⁰  ↑   ↑    ↑   ↑    ↑   ↑    ↑   ↑ │   │    │   │    │   │    │   └── 最低位(LSB):权重 2⁰(1)  │   │    │   │    │   │    └────── 数值 1│   │    │   │    │   └── 次低位:权重 2¹(2)  │   │    │   │    └────── 数值 0│   │    │   └── 次高位:权重 2²(4)│   │    └────── 数值 1│   └── 最高位:权重 2³(8)└────── 数值 1

程序员视角:位权与数值范围

  • 位权的隐含规则
    在编程中,数值的每一位权重由存储位置隐式定义。例如,一个8位二进制数(b0~b7编号) b7b6b5b4b3b2b1b0 的值为:
    b7*2⁷ + b6*2⁶ + ... + b0*2⁰

  • 数值范围限制

    • n位十进制正整数范围0 ~ 10ⁿ - 1
    • n位二进制正整数范围0 ~ 2ⁿ - 1
      这种限制直接体现在数据类型中(如C语言的uint8_t范围为0~255)。

1-1. 扩展:负整数的“阶”与补码表示

负整数的二进制表示需引入 符号位,但现代计算机采用 补码(Two’s Complement) 方案,使得加减法统一为加法操作。

补码的本质
  • n位补码定义
    -x = 2ⁿ - x
    例如,8位系统中 -5 的补码为:
    256 - 5 = 251 → 11111011
  • 符号位的权重
    补码的最高位既是符号位,也参与数值计算。
    例如,8位补码 10110111 的值为:
    -1*2⁷ + 0*2⁶ + 1*2⁵ + 1*2⁴ + 0*2³ + 1*2² + 1*2¹ + 1*2⁰ = -73

2. 十进制小数与二进制定点数

定点数格式

  • 定点小数:固定小数点位置(如8位格式:iii.fffff
  • 二进制小数转换:
    (0.625)₁₀ = 0.5 + 0.125 = (0.101)₂

转换陷阱

  • 精度丢失
    (0.1)₁₀ → (0.0001100110011...)₂(无限循环)

3. 十进制与二进制定点数的转换

十进制小数转二进制步骤

  1. 整数部分:除2取余

  2. 小数部分:乘2取整

    10.625 → 
    整数部分:10 → 1010  
    小数部分:0.625 × 2 = 1.25 → 取1  0.25 × 2 = 0.5 → 取0  0.5 × 2 = 1.0 → 取1  
    结果:1010.101
    

二进制转十进制

1010.101 → 8 + 2 + 0.5 + 0.125 = 10.625


4. 十进制科学计数法

标准形式

N = (-1)^s × M × 10^E

  • s: 符号(0正1负)
  • M: 尾数(1 ≤ M < 10)
  • E: 阶码

示例:
-123.45 → -1.2345 × 10²


5. 二进制科学计数法与IEEE 754浮点数

二进制规格化形式

N = (-1)^s × 1.M × 2^E

IEEE 754标准解析

单精度(32位)结构:
| 1位符号 | 8位阶码 | 23位尾数 |
关键特性:
  1. 阶码偏移实际指数 = 阶码 - 127

  2. 隐含前导1:尾数存储的是小数点后的部分

  3. 特殊值处理

    • 阶码全0: 非规格化数(隐含0.xxx)
    • 阶码全1: 无穷大/NaN
转换示例(单精度):

-5.75 →

  1. 二进制:-101.11

  2. 规格化:-1.0111 × 2²

  3. 编码:

    • 符号位:1
    • 阶码:2 + 127 = 129 → 10000001
    • 尾数:0111000…(共23位)

总结与扩展

  • 定点数适合硬件实现但范围有限
  • IEEE 754通过科学计数法实现高动态范围
  • 浮点数误差根源:二进制无法精确表示某些十进制小数
附:IEEE 754单精度内存布局示例
符号位 | 阶码(8位) | 尾数(23位)1   | 10000001  | 01110000000000000000000
http://www.xdnf.cn/news/9218.html

相关文章:

  • 高压单端探头,如何实现大比例的衰减?
  • 【NLP基础知识系列课程-Tokenizer的前世今生第二课】NLP 中的 Tokenizer 技术发展史
  • 【Vue3】生命周期 hook函数 toRef
  • 通义智文开源QwenLong-L1: 迈向长上下文大推理模型的强化学习
  • 浅解Vue 数据可视化开发建议与速度优化
  • 【华为云物联网】如何实现在 MQTT.fx 上模拟数据间隔上传一次,并按设定系数变动数据
  • HTML 表单与输入:基础语法到核心应用全解析
  • UBUNTU20.04 配置以QT界面程序代替系统界面启动,以及如何在tty模式下以linuxfb形式启动
  • Halcon 霍夫变换
  • 获取页面上当前激活(获得焦点)的元素
  • Frequent values/gcd区间
  • 行为型:中介者模式
  • C++11 中引入的`final` 关键字作用。
  • ImageMagick 是默认使用 CPU 来处理图像,也具备利用 GPU 加速的潜力
  • 数据库的事务(Transaction)
  • 路桥隧养护决策系统
  • atomic.Value 中存储的数据是否会被 GC
  • vue展示修改前后对比,并显示修改标注diff
  • 四足机器人环境监测系统相关问题
  • Mac 每日磁盘写入量异常高
  • AI如何颠覆财务预测?——用Python打造自动化智能分析系统
  • 基于Java,SpringBoot,Vue,UniAPP宠物洗护医疗喂养预约服务商城小程序管理系统设计
  • SQL Server 简介和与其它数据库对比
  • 联想小新笔记本电脑静电问题导致无法开机/充电的解决方案
  • 远程控制技术全面解析:找到适合你的最佳方案
  • 北京大学肖臻老师《区块链技术与应用》公开课:03-BTC-数据结构
  • 计算机网络的性能指标
  • 网络协议:[0-RTT 认证 ]
  • 在 LangGraph 中集成 Mem0 记忆系统教程
  • 【HarmonyOS5】Stage模型应用程序包结构详解