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

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

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


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

相关文章:

  • Python学习(2) ----- Python的类型
  • 多模态大语言模型arxiv论文略读(九十五)
  • Python正则表达式:30秒精通文本处理
  • Java中数组(一维/二维)与字符串操作(String/StringBuilder/StringBuffer)详解
  • mysql中的索引怎么用?
  • 高压单端探头,如何实现大比例的衰减?
  • 在thinkphp5.0中。单表使用 model clone 时就会有问题。 需要使用 alias(), 否则会报错。
  • 网络协议:[0-RTT 认证 ]
  • 一起学数据结构和算法(二)| 数组(线性结构)
  • VMware-MySQL主从
  • 板凳-------Mysql cookbook学习 (七)
  • 2025上半年软考高级系统架构设计师经验分享
  • Elasticsearch索引机制与Lucene段合并策略深度解析
  • 【QT】在QT6中读取文件的方法
  • 鸿蒙OSUniApp 实现的数字键盘与密码输入框组件#三方框架 #Uniapp
  • 一起学数据结构和算法(三)| 字符串(线性结构)
  • 人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理
  • C++(初阶)(二十)——封装实现set和map
  • 每日算法-250527
  • 路桥隧养护决策系统
  • 广东知名网站建设/搜索引擎优化结果
  • 建设部网站危险性较大/超级外链发布工具
  • qq自动发货平台网站怎么做/百度认证官网
  • 一站建设个人网站/网络推广营销公司
  • 网站开发的研究背景/企业网站建设报价表
  • 在一家传媒公司做网站编辑 如何/东莞企业网站排名