编程基础学习

发布时间:2026/10/30 8:05:34
编程基础学习
数制转换

二进制和十进制互相转换

原码反码补码

逻辑符号

编码

IEEE754浮点数

IEEE754是计算机表示浮点数的标准,核心思想是想把一个数拆出符号位、指数位、尾数位三部分存储。最常用的是32位单精度(float)和64位双精度(double)。

  • 单精度(32位):1符号位+8位指数+23位尾数,指数偏移量为127.
  • 双精度(64位):1符号位+11位指数+52位尾数,指数偏移量为1023.
举例说明

以单精度浮点数表示176.0625为例:

  1. 转换为二进制:10110000.0001
  2. 规格化:1.01100000001×2^7
  3. 符号位:0(正数)
  4. 指数编码:7 + 127 = 134 → 二进制10000110
  5. 尾数(隐藏前导1后):01100000001000000000000
    最终存储为:0 10000110 01100000001000000000000
    大致理解:阶码指数表示数的大小,全是1接近最大,全是0接近最小;尾数表示具体的值
关键规则
  1. 规约数(Normalized):尾数前隐藏一个默认的1.,实际公式为:(-1)^S × 1.M × 2^(E-偏移量)。例:二进制1.0101,只存小数点后面0101,开头的1不占用存储空间,节省一位。
  2. 非规约数(Subnormal):指数位全0且尾数非0时,用于表示接近0的极小数值,此时尾数前不再隐藏1.,计算公式位:(-1)^S × 0.M × 2^(1-偏移量)。
  3. 特殊值:
    指数全0、尾数全0 → ±0;指数全1、尾数全0→±∞;指数全1、尾数非0→NaN(非数值).
  4. 有效数字不是小数点后的位数,是全部有效数字。float:23位尾数,换算十进制大约6~7位有效数字;double:52位尾数,大约15-16位有效数字。

数值变大之后,float尾部小数丢失精度。

注意:指数全0和全1都有特殊含义,不能当作普通指数使用;实际可用的指数范围单精度位-126到+127,双精度位-1022到+1023.

有效位数

二进制每增加1bit,能区分2倍大小;十进制每增加1位,能区分10倍大小。log102 ≈ 0.3010含义:1个二进制bit≈0.301位十进制有效数字。

  • float:24bit × 0.301 ≈ 7.2位;
  • double:53bit × 0.301 ≈ 16位。
阶码偏移(移码)

IEEE-754的阶码不直接存真实指数,要加上一个偏移量。

  • float(32位):偏移量 = 127
  • double(64位):偏移量 = 1023
特殊规则:阶码两种边界情况
  1. 阶码全部比特为1
    1. 尾数全0:无穷大(inf)
    2. 尾数非0:非数字(NaN,无效计算结果,比如0除以0)
  2. 阶码全部比特为0
    1. 代表非规格化数,用来表示接近0的极小数字;此时不再隐藏开头的1.

正常使用的普通浮点数,阶码既不全0,也不全1.