简介

在计算机系统中,各种各样的信息内容(文字、图像、音频等)均是以的形式被存储、计算与传输;
实际上,所有的信息均依赖作为介质完成运转

  • 数是对底层复杂电信号变化运转的简化抽象

数的表示形式(数制)

二进制

介绍

计算机的信息数据均采用二进制来表示

  • 二进制的数由’0’和’1’表示,逢二进一,通过位数的堆叠表示任意数字,前/后缀"0b"、“0B”、“b/B”
  • 从数学上看,从右往左数第 xx 位表示 22x1x-1 次幂

例: 0b10101100 --> 27+25+23+22=1722^7 + 2^5 + 2^3 + 2^2 = 172

  • 位(bit,b,比特) 是数据存储的最小单位,8位二进制数字(8bit)形成一个 字节(byte,B)
  • : 计算机进行数据存储、数据处理的单位;字长: 一个字的长度/位数,不同平台和处理器提供的字长不同

八进制, 十进制, 十六进制

本质为二进制数字的简化,便于查看与使用

  • 八进制前/后缀:“0o”、“0O”、“o/O”
  • 十进制后缀:“d/D”
  • 十六进制前/后缀:“0x”、“0X”、“h/H”

数的类型表示

该节使用在无特殊说明的情况下默认使用 8位 二进制数字举例

以符号划分类型

以符号作为划分基准,分为 无符号数有符号数

无符号数

无符号数所有位表示数值,所表示的数字为非负数,表示的范围是 0 ~ 255 (00000000 ~ 11111111)

有符号数

有符号数的最高位表示正(0)负(1)(符号位),其余位数表示数值(数位),引入三种表示方法: 原码反码补码

  1. 原码
  • 最简单的表示方法,字面意思上的最高位表示符号,其余位表示数字

    00000001 表示 +110000001 表示 -1,诸如此类

  • 表示范围
    • 正数区域: 1 ~ 127 (00000001 ~ 01111111)
    • 负数区域: -127 ~ -1 (11111111 ~ 10000001)
    • 0: (0000000,10000000)
  • 缺点:
    1. 0 有两种表示方法(0000000(+0)和10000000(-0))
    2. 直接用于运算时可能导致数值错误(例如正负数相加时,1 + (-1) = 0,但二进制计算 00000001 + 10000001 = 10000010(-2))
  1. 反码
  • 符号位为0时(正数),反码 == 原码;符号位为1时(负数),数位在原码数位表示的基础上全部取反

    -1在原码表示为10000001, 其反码则为11111110

  • 表示范围
    • 正数区域: 1 ~ 127 (00000001 ~ 01111111)
    • 负数区域: -127 ~ -1 (10000000 ~ 11111110)
    • 0: (0000000,11111111)
  • 缺点:
    1. 0 有两种表示方法(0000000(+0)和11111111(-0))
    2. 部分运算可能导致数值错误(11111010(-5) + 11111010(-5) = 11110100(-11))
  1. 补码
  • 当今的计算机系统中,普遍使用补码表示和存储数据
  • 符号位为0时(正数),补码 == 原码;符号位为1时(负数),数位最低位的1保持不变,比该位高的位全部取反(数位在反码数位表示的基础上加1)

    -1在反码表示为11111110, 其补码则为11111111

  • 表示范围
    • 正数区域: 1 ~ 127 (00000001 ~ 01111111)
    • 负数区域: -128 ~ -1 (10000000 ~ 11111110)
    • 0: (0000000)

以小数点的位置是否变化划分类型

以小数点的位置是否变化作为划分基准,分为 定点数浮点数

计算机所表示的小数并非是精确的,表示的数值总是近似的,因此在计算中可能存在偏差,例如 0.1 + 0.2 不完全等于 0.3

定点数

  • 定点表示法: 约定数值的小数点隐含/固定在某个位置上

    举例: 25.125,整数部分简单表示为 11001,小数部分简单表示为 001(2^-3),合起来为11001001 --> 11001.001(小数点位置显示)
    对于8位纯小数而言,最高位为符号位,小数点在最高位之后,其余表示数值

  • 定点表示的数值范围较小

浮点数

  • 表示形式类似科学计数法,浮点数 = 尾数 * 基数 ^ 指数
  • 其表示的数值小数点位置是不固定的,称为浮点(floating point)
  • IEEE-754 二进制浮点数算术标准
    • 四种表示浮点数值方式
      • 单精确度(32位)
      • 双精确度(64位)
      • 延伸单精确度(43位以上)
      • 延伸双精确度(79位以上)
    • 公式: Value=(1)S(1+M)2(EB)Value = (-1)^S * (1 + M) * 2^{(E - B)}
      • S: 符号位
      • M: 尾数(纯小数)
      • E: 指数/阶码
      • B: 偏移量
    • 单精确浮点数
      • 组成
        • 符号位: 1bit
        • 指数/阶码: 8bit
        • 尾数: 23bit
        • 偏移量: 127
      • 表示范围约: 1.210381.2 * 10^{-38} ~ 3.410383.4 * 10^{38}
    • 双精确浮点数
      • 组成
        • 符号位: 1bit
        • 指数/阶码: 8bit
        • 尾数: 23bit
        • 偏移量: 1023
      • 表示范围约: 2.2103082.2 * 10^{-308} ~ 1.8103081.8 * 10^{308}
  • 运算
    • 假设浮点数 X=MX2EXX = M_X * 2^{E_X}, Y=MY2EYY = M_Y * 2^{E_Y}, 那么 Z=X±Y=(MX2(EXEY)±MY)2EY(EXEY)Z = X \pm Y = (M_X * 2^{(E_X - E_Y)} \pm M_Y) * 2^{E_Y} (E_X \le E_Y)
    • 步骤
      1. 0 操作数检查
      2. 对阶(原则是小阶对大阶)(小阶对应的尾数右移 ΔE\Delta E 位)
      3. 尾数相加减/乘除
      4. 结果规格化
        1. 尾数溢出: 右规 1 次(尾数右移 1 位,阶码 +1)
        2. |尾数| < 212^{-1} : 左规(尾数左移 1 位,阶码 -1),左规可能多次,直到尾数规格化
      5. 舍入(根据一定规则,将数的最低位或低位若干位舍去,而对保留位的数进行修正)
        • 要求
          1. 单次舍入引起的误差不超过保留数最低位的位权
          2. 多次舍入不造成误差积累
        • IEEE-754 标准四种舍入
          • 就近舍入(四舍五入)
          • 朝 0 舍入
          • 朝 +∞ 舍入
          • 朝 -∞ 舍入
      6. 判断阶码是否溢出(正溢出溢出标志置1,负溢出时运算结果清零)

数的运算

运算类型 运算符 运算描述
算术运算 + 加法
- 减法
* 乘法
/ 除法
% 取模
逻辑运算 & 按位与
| 按位或
^ 按位异或
~ 按位取反
移位运算 << 左移
>> 右移
比较运算 == 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于