计算机组成原理之计算篇

1,488 阅读4分钟

本文对学习内容做一个记录,方便后期对知识点复习和补充。
课程:计算机组成原理、操作系统、计算机网络

进制运算的基础

进制概述

  • 进位制是一种记数方式,亦称进位记数法或者位值计数法
  • 有限种数字符号来表示无限的数值
  • 使用的数字符号的数目称为这种进位制的基数或底数

二进制运算的基础

(整数)二进制转十进制:按权展开法

(整数)十进制转换成二进制:重复相除法

(小数)二进制转换成十进制:按权展开法

(小数)十进制转换成二进制:重复相乘法

有符号数与无符号数

原码表示法

  • 使用0表示正数,使用1表示负数
  • 规定符号位位于数值第一位
  • 表达简单明了,是人类最容易理解的表示法

原码表示法的缺点

二进制的补码表示法

例子

引进补码的目的

  • 减法运算复杂,希望找到使用正数替代负数的方法
  • 使用加法替代减法操作,从而消除减法
  • 但是计算补码的过程中,还是使用了减法

二进制的反码表示法

  • 反码的目的是找出原码和补码之间的规律,消除转换过程中的减法

原码、补码、反码规律

定点数与浮点数

定点数的表示方法

  • 小数点固定在某个位置的数称之为定点数

纯小数和纯整数

  • 如果数字不是纯小数,也不是纯整数,则需要乘以比例因子以满足定点数保存格式

浮点数的表示方法

  • 计算机处理的很大程度上不是纯小数或纯整数
  • 数据范围很大,定点数难以表达且定点数不够灵活
  • 因此需要学习了解浮点数

浮点数的表示格式

  • S:尾数(尾数必须使用纯小数)
  • r:基数
  • j:阶码(阶码为二进制)

浮点数的表示范围

  • 假设阶码数值取m位,尾数数值取n位
  • 上溢:这个数绝对值太大了。浮点数无法表示
  • 下溢:这个数绝对值太小了。浮点数无法表示
  • 单精度浮点数:使用4字节、32位来表达浮点数(float)
  • 双精度浮点数:使用8字节、64位来表达浮点数(double)

浮点数的规格化

  • 尾数规定使用纯小数
  • 尾数最高位必须是1

定点数与浮点数的对比

  • 当定点数与浮点数位数相同时,浮点数表示的范围更大
  • 当浮点数尾数为规格化数时,浮点数的精度更高
  • 浮点数的运算包含阶码和尾数,浮点数的运算更为复杂
  • 浮点数在数的表示范围、精度、溢出处理、编程等方面均优于定点数
  • 定点数在数的运算规则、运算速度、硬件成本方面优于浮点数

定点数的加减法运算

加法操作

例子

判断溢出

  • 双符号位判断法
    • 单符号位表示变成双符号:0=>00, 1=>11
    • 双符号位产生的进位丢弃
    • 结果的双符号位不同则表示溢出

减法操作

浮点数的加减法运算

对阶

  • 对阶的目的是使得两个浮点数阶码一致,使得尾数可以进行运算
  • 浮点数尾数运算简单
  • 浮点数尾数实际小数位与阶码有关
  • 阶码按小阶看齐大阶的原则

尾数求和(与定点数相同)

尾数规格化

  • 对补码进行规格化需要判断两种情况:S>0和S<0

左移规格化

右移规格化

  • 双符号位不一致下需要右移
  • 右移的话则需要进行舍入操作
  • 舍去1则需要加1,舍去的是0则不进行加1操作
  • 定点运算双符号不一致为溢出,浮点运算尾数双符号位不一致不算溢出,因为可以进行右移规避
  • 浮点运算主要通过阶码的双符号位判断是否溢出,如果规格化后,阶码双符号位不一致,则认为是溢出

浮点数的乘除法运算

运算过程

浮点数的乘法

浮点数的除法