【计组】数的表示与计算

计算机组成原理归纳
1. 概述
2. 数的表示与计算
3. 存储器
4. 指令系统
5. 处理器
6. 总线
7. IO系统


1.1 字符和字符串

在这里插入图片描述

1.2 数据存储与排列

1.2.1 存储模式

多字节数据在内存中一定占连续的字节

大端模式:高字节低地址

小端模式:低地址低字节

在这里插入图片描述
一个多字节数据,必须存放在连续的地址单元

1.2.2 边界对齐

边界对齐:访问一个字/半字只需一次访存

边界不对齐:访问一个字/半字可能需要两次访存
在这里插入图片描述

1.3 二进制

1.3.1 计算机采用二进制原因

  • 可行性:二进制只有01两个状态,能标识01两种状态的电子器件很多。
  • 运算简易性:二进制运算法则少,运算简单,简化硬件结构
  • 有逻辑代数的理论基础:二进制0和1正好和逻辑代数的真假对应

1.3.2 编码(二进制的解释方式)

原码

n+1位定点整数 1 1 ⋯ 11 ⏟ n . ∼ 0 11 ⋯ 1 ⏟ n . 1\underbrace{1\cdots11}_{n}.\sim 0\underbrace{11\cdots1}_n. 1n 111.0n 111. :范围 − 2 n − 1 ∼ 2 n − 1 -2^n-1\sim2^n-1 2n12n1

n+1位定点小数 1. 11 ⋯ 11 ⏟ n ∼ 0. 11 ⋯ 11 ⏟ n 1.\underbrace{11\cdots 11}_{n}\sim 0.\underbrace{11\cdots 11}_n 1.n 11110.n 1111 范围 − 1 + 2 − n ∼ 1 − 2 − n -1+2^{-n}\sim 1-2^{-n} 1+2n12n

  • 字长足够,则可表示任意整数
  • 不能表示任意小数,只能是2的整数次幂
  • 真值0不唯一,可表示数少1
反码

真值0不唯一:+0,-0

表示数值的范围和原码相同

补码

n + 1 n+1 n+1 位二进制数可表示

  • 定点整数 1 , 00 ⋯ 00 ⏟ n . ∼ 0 , 11 ⋯ 11 ⏟ . 1,\underbrace{00\cdots 00}_n.\sim 0,\underbrace{11\cdots 11}. 1,n 0000.0, 1111. − 2 n ∼ 2 n − 1 -2^n \sim 2^n-1 2n2n1
  • 定点小数 1. 00 ⋯ 00 ⏟ n ∼ 0. 11 ⋯ 11 ⏟ n 1.\underbrace{00\cdots00}_n\sim 0.\underbrace{11\cdots11}_n 1.n 00000.n 1111 − 1 ∼ 1 − 2 − n -1\sim 1-2^{-n} 112n

补码特点(机内码)

  • 真值0的补码唯一
  • 正数的补码二进制表示的无符号数,小于负数的补码表示的无符号二进制数
    • 如:127:0111 1111,-1;
  • 数值位1越多表示数字越大
    • 0同侧编码值越大,真值越大
    • 正数的2进制编码小于负数的二进制编码 1000(-8) <0111(7)

原码变为补码:从右到左,找到第一个1,其左边取反,其右边不变
原码: 01110100 补码: 10001100 \begin{aligned} &原码:0111 0100\\ &补码:1000 1100 \end{aligned} 原码:01110100补码:10001100

  • 正数补码等于原码(什么编码都不变)
  • 负数补码等于原码取反加一

在这里插入图片描述

编码方式与范围

n位2进制编码

编码方式最小值编码最小值最大值编码最大值数值范围
无符号定点整数 00...00 ⏟ n . \underbrace{00...00}_n. n 00...00.0 11...11 ⏟ n . \underbrace{11...11}_n. n 11...11. 2 n + 1 − 1 2^{n+1}-1 2n+11 0 ≤ x ≤ 2 n + 1 − 1 0\le x\le 2^{n+1}-1 0x2n+11
无符号定点小数 . 00...00 ⏟ n .\underbrace{00...00}_n .n 00...000 0. 11...11 ⏟ n 0.\underbrace{11...11}_n 0.n 11...11 1 − 2 − n 1-2^{-n} 12n 0 ≤ x ≤ 1 − 2 − n 0\le x\le 1-2^{-n} 0x12n
原码定点整数 1 , 1...11 ⏟ n − 1 . 1,\underbrace{1...11}_{n-1}. 1,n1 1...11. − 2 n + 1 -2^n+1 2n+1 0 , 1 ⋯ 11 ⏟ n − 1 . 0,\underbrace{1\cdots11}_{n-1}. 0,n1 111. 2 n − 1 2^n-1 2n1 − 2 n + 1 ≤ x ≤ 2 n − 1 -2^n+1\le x \le 2^n-1 2n+1x2n1
原码定点小数 1. 1...11 ⏟ n − 1 1.\underbrace{1...11}_{n-1} 1.n1 1...11 − 1 + 2 − n -1+2^{-n} 1+2n 0. 1...11 ⏟ n − 1 0.\underbrace{1...11}_{n-1} 0.n1 1...11 1 − 2 − n 1-2^{-n} 12n − 1 − 2 − n ≤ x ≤ 1 − 2 − n -1-2^{-n}\le x \le 1-2^{-n} 12nx12n
补码定点整数 1 , 0...00 ⏟ n − 1 . 1,\underbrace{0...00}_{n-1}. 1,n1 0...00. − 2 n -2^n 2n 0 , 1...11 ⏟ n − 1 . 0,\underbrace{1...11}_{n-1}. 0,n1 1...11. 2 n − 1 2^n-1 2n1 − 2 n ≤ x ≤ 2 n − 1 -2^n\le x \le 2^n-1 2nx2n1
补码定点小数 1. 0...00 ⏟ n − 1 1.\underbrace{0...00}_{n-1} 1.n1 0...00 − 1 -1 1 0. 1...11 ⏟ n − 1 0.\underbrace{1...11}_{n-1} 0.n1 1...11 1 − 2 − n 1-2^{-n} 12n − 1 ≤ x ≤ 1 − 2 − n -1\le x \le 1-2^{-n} 1x12n
移码

真值加一个常数

[ x ] 移 = 2 n + x ( − 2 n ≤ x ≤ 2 n ,机器字长为 n + 1 ) x 1 = + 10101 , x 2 = − 10101 ,字长 8 位,则其移码表示为: [ x 1 ] 移 = 2 7 + 10101 = 1 , 0010101 , [ x 2 ] 移 = 2 7 + ( − 10101 ) = 0 , 1101011 \begin{aligned} &[x]_移=2^n+x(-2^n\le x \le 2^n,机器字长为n+1)\\ &x_1=+10101,x_2=-10101,字长8位,则其移码表示为:\\ &[x_1]_移=2^7+10101=1,0010101,[x_2]_移=2^7+(-10101)=0,1101011 \end{aligned} [x]=2n+x2nx2n,机器字长为n+1x1=+10101x2=10101,字长8位,则其移码表示为:[x1]=27+10101=1,0010101,[x2]=27+(10101)=0,1101011

  • 只能表示整数
  • 真值0唯一
  • 移码大小与数值的大小一致
    • 移码大,真值大
    • 移码小,真值小

n位二进制能表示 2 n 2^n 2n 个数字

1.3.3 无符号整数

用于表示内存地址信息

表示范围 0 ∼ 2 n − 1 0\sim 2^n-1 02n1

若寄存器位数小于无符号定点整数,舍去高位 发生上溢出

1.3.4 定点数运算

移位
逻辑移位

无符号数,空位填0

算术移位

有符号数
在这里插入图片描述

循环移位

丢弃位会存在 CF

适用情况:高低字节数据互换
在这里插入图片描述

加法
原码

符号位相同:绝对值相加,符号位不变

符号位不同:符号等于绝对值大者

机内实现两种策略

  • 转换为补码后,用补码加减法实现,结果再转回原码
  • 直接用原码进行加减,符号与数值分开运算
补码

符号位和尾数一起运算

补码运算结果为补码

补码加减运算:

  • 当参加运算的数是定点小数时,模 M = 2 M=2 M=2
  • 当参加运算的数是定点整数时,模 M = 2 n + 1 M=2^{n+1} M=2n+1

[ A + B ] 补 = [ A ] 补 + [ B ] 补 ( m o d M ) [ A − B ] 补 = [ A ] 补 + [ − B ] 补 ( m o d M ) [A+B]_补=[A]_补+[B]_补(mod\quad M)\\ [A-B]_补=[A]_补+[-B]_补(mod\quad M) [A+B]=[A]+[B](modM)[AB]=[A]+[B](modM)

溢出判断

只有 “正数+正数” 才可能 上溢 —— 正+正=负

只有 “负数+负数” 才可能 下溢 —— 负+负=正

采用一位符号位 (模2补码)

设 A 的符号位为 A s A_s As ,B的符号位为 B s B_s Bs ,运算结果符号位为 S s S_s Ss ,则溢出表达式为 V = A s B s S s ‾ ⏟ 001 + A s ‾ B s ‾ S s ⏟ 110 V=\underbrace{A_sB_s\overline{S_s}}_{001}+\underbrace{\overline{A_s}\overline{B_s}S_s}_{110} V=001 AsBsSs+110 AsBsSs

  • V = 1 V=1 V=1 ,表示无溢出
  • V = 0 V=0 V=0 ,表示有溢出

如:
[ A + B ] 补 = 0 , 0001111 + 0 , 1111100 = 1 , 0001011 真值 − 117 V = 0 ,溢出 [ B − C ] 补 = 1 , 1101000 + 1 , 0000100 = 0 , 1101100 真值 + 108 , V = 1 ,溢出 \begin{aligned} &[A+B]_{补}=0,0001111+0,1111100=1,0001011 真值-117 V=0,溢出\\ &[B-C]_补=1,1101000+1,0000100=0,1101100 真值+108,V=1,溢出 \end{aligned} [A+B]=0,0001111+0,1111100=1,0001011真值117V=0,溢出[BC]=1,1101000+1,0000100=0,1101100真值+108V=1,溢出
根据进位情况判断

符号位进位 C S C_S CS最高数值位进位 C 1 C_1 C1
上溢01
下溢10

在这里插入图片描述
即: C s C_s Cs C 1 C_1 C1 不同时有溢出

溢出判断表达式为 V = C s ⊕ C 1 V=C_s\oplus C_1 V=CsC1

  • V = 0 V=0 V=0 ,表示无溢出
  • V = 1 V=1 V=1 ,表示有溢出

双符号位 (模4补码)

正数符号00,负数符号11
[ A + C ] 补 = 00 , 0001111 + 00 , 1111100 = 0 ⏟ 本来符号位 1 ⏟ 实际符号位 , 0001011 上溢 [ B − C ] 补 = 11 , 1101000 + 11 , 0000100 = 10 , 1101100 下溢 \begin{aligned} &[A+C]_补=00,0001111+00,1111100=\underbrace{0}_{本来符号位}\underbrace{1}_{实际符号位},0001011 \quad 上溢\\ &[B-C]_补=11,1101000+11,0000100=10,1101100\quad 下溢 \end{aligned} [A+C]=00,0001111+00,1111100=本来符号位 0实际符号位 1,0001011上溢[BC]=11,1101000+11,0000100=10,1101100下溢
记两个符号位为 S s 1 S s 2 S_{s1}S_{s2} Ss1Ss2 ,则 V = S s 1 ⊕ S s 2 V=S_{s_1}\oplus S_{s_2} V=Ss1Ss2

  • V = 0 V=0 V=0 ,表示无溢出
  • V = 1 V=1 V=1 ,表示有溢出

上溢:超出表示范围的上边界

下溢:低于表示范围的下边界

注意:

  • 实际存储时只存一位符号位,在运算时复制
  • 双符号位,算术移位只有低位符号位参与(由于实际只存1位)
乘法

在这里插入图片描述

原码一位乘

结果的符号位通过 异或 确定

  • 符号位不参与运算,可以省略
  • 原码一位乘可以只用单符号位

数值部分通过被乘数和乘数绝对值的n轮 加法、移位 完成

根据当前乘数中参与运算的位确定 (ACC) 加什么

  • 为0,则 ( A C C ) + 0 (ACC)+0 (ACC)+0
  • 为1,则 ( A C C ) + [ ∣ x ∣ ] 原 (ACC)+[\mid x\mid]_原 (ACC)+[x]

每轮加法后,ACC,MQ的内容统一 **逻辑右移 **

设机器字长5位(1位符号位,4位数值位), x = ( 13 ) 10 = + 1101 , y = ( − 11 ) 10 = − 1011 x=(13)_{10}=+1101,y=(-11)_{10}=-1011 x=(13)10=+1101,y=(11)10=1011 ,采用原码一位乘法求 x × y x\times y x×y

  • 符号位 P s = x s ⊕ y s = 0 ⊕ 1 = 1 P_s = x_s\oplus y_s=0\oplus 1=1 Ps=xsys=01=1

  • ∣ x ∣ = 1101 , ∣ y ∣ = 1011 \mid x\mid = 1101,\mid y\mid = 1011 x∣=1101,y∣=1011 ,原码一位乘法的求解过程如下

    在这里插入图片描述

  • 最后结果为 P s + ( A C C ) + ( M Q ) = 1.1000 1111 = − 0.1000 1111 P_s+(ACC)+(MQ)=1.1000\quad1111=-0.1000\quad1111 Ps+(ACC)+(MQ)=1.10001111=0.10001111

还不懂的话去看:参考博客

补码一位乘(Booth法)

增加一位辅助位,补充到最低位,初始值为 0 0 0

  • n轮加法,加法规则

    在这里插入图片描述

  • 补码的算数右移,符号位不动,数值位右移

    符号位是什么就补什么

设机器字长5位(1位符号位,4位数值位), x = ( − 13 ) 10 = − 0.1101 , y = ( 11 ) 10 = + 0.1011 x=(-13)_{10}=-0.1101,y=(11)_{10}=+0.1011 x=(13)10=0.1101,y=(11)10=+0.1011 ,采用补码一位乘法求 x × y x\times y x×y

  • [ x ] 补 = 11.0011 , [ − x ] 补 = 00.1101 [x]_补=11.0011,[-x]_{补}=00.1101 [x]=11.0011,[x]=00.1101

  • 计算过程
    在这里插入图片描述

  • 结果: [ x ⋅ y ] 补 = 11.0111 0001 [x·y]_{补}=11.0111\quad 0001 [xy]=11.01110001,即 x ⋅ y = − 0.1000 1111 x·y=-0.1000\quad 1111 xy=0.10001111

还不懂的话去看:参考博客

除法

在这里插入图片描述

原码一位除

符号位 Q s = x s ⊕ y s Q_s = x_s\oplus y_s Qs=xsys

恢复余数法:当余数为负时,上商0,并 + 除数 +除数 +除数 ,再左移,再 − 除数 -除数 除数

加减交替法:当余数为负时,上商0,并左移,再 + 除数 +除数 +除数

在这里插入图片描述
在这里插入图片描述

补码一位除
  • 符号位参与运算,除数和被除数均用双符号位表示
  1. 被除数与除数同号,被除数减去除数;

    被除数与除数异号,被除数加上除数

  2. 余数和除数同号,商为1,余数左移一位,下次减除数;

    余数和除数异号,商为0,余数左移一位,下次加除数。

  3. 重复步骤2,包括符号在内,工作n+1步

已知 x=0.1011,y=0.1101,用补码加减交替法求 x y \frac{x}{y} yx

[ x ] 补 = 00.1011 , [ y ] = 00.1101 , [ − y ] 补 = 11.0011 , n = 4 [x]_补=00.1011,[y]=00.1101,[-y]_补=11.0011,n=4 [x]=00.1011,[y]=00.1101,[y]=11.0011,n=4

在这里插入图片描述
[ Q ] 补 = 0.1101 [Q]_补=0.1101 [Q]=0.1101,余数 [ R ] 补 = 0.0111 [R]_补=0.0111 [R]=0.0111

强制类型转换
等字长无符号数与有符号数

位值不变,改变解释方式

不同字长整数之间转换
大字长到小字长

将多余高位字长部分截断,低位赋值

小字长到大字长

数值相等,高位进行符号位填充

填充规则

在这里插入图片描述

  • 定点整数:在原符号位和数值位中间添加新位

    正数加0

    负数:原码加0;反,补码加1

  • 定点小数:在原数值位后面添加新位

    正数都加0

    负数:原、补码加0,反码加1

1.3.5 浮点数运算

引入目的
  • 在二进制位数不变的前提下,扩展可表示范围
  • 定点数精度比浮点数大
格式

在这里插入图片描述
浮点数数值: N = r E × M N=r^E\times M N=rE×M

阶码

阶码反映浮点数表示范围及小数点位置

阶码是用补码或移码表示的定点整数

阶码的表示算数左移位数

尾数

尾数反映精度

尾数是用原码或补码表示的定点小数

尾数越少,可表示的精度越低

7位阶码,1位数符,8位尾数。若阶码用移码,尾数用补码表示,则浮点数所能表示数的范围

  • 阶码最大 2 7 − 1 = 63 2^7-1=63 271=63

    尾数范围 − 1 ∼ 1 − 2 − 8 -1\sim 1-2^{-8} 1128

    − 2 63 ∼ ( 1 − 2 − 8 ) × 2 63 -2^{63}\sim (1-2^{-8})\times2^{63} 263(128)×263

规格化

没有隐含1,尾数最小值为-1

有隐含1,尾数最小值 − ( 2 − 2 n ) -(2-2^n) (22n)

尾数规格化

规格化浮点数:规定位数的最高数值位必须是一个有效值

左规:当浮点数运算的结果为非规格化时要进行规格化处理,将 尾数算数左移一位,阶码减一

右规:当浮点数运算的结果位数出现溢出(双符号位为01或10)时,将 尾数算数右移一位,阶码加一
在这里插入图片描述

用原码表示的尾数进行规格化

正数 0.1 X X X . . X X 0.1XXX..XX 0.1XXX..XX 的形式。其最大值表示为 0. 11..1 ⏟ n 0.\underbrace{11..1}_{n} 0.n 11..1 ,最小值表示为 0.10..0 0.10..0 0.10..0 。尾数的表示范围为 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\le M\le (1-2^{-n}) 21M(12n)

负数为 1.1 X X X . . X X 1.1XXX..XX 1.1XXX..XX 的形式。 其最大值表示为 1. 10..0 ⏟ n 1.\underbrace{10..0}_n 1.n 10..0 ,最小值表示为 1. 11..1 ⏟ n 1.\underbrace{11..1}_n 1.n 11..1 。尾数的表示范围为 − ( 1 − 2 − n ) ≤ M ≤ − 1 2 -(1-2^{-n})\le M\le-\frac{1}{2} (12n)M21

用补码表示的尾数进行规格化

正数 0.1 X X . . X 0.1XX..X 0.1XX..X 的形式。其最大值表示为 0. 11...1 ⏟ n 0.\underbrace{11...1}_n 0.n 11...1 ,最小值表示为 0.10..0 0.10..0 0.10..0。尾数的表示范围为 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2}\le M\le (1-2^{-n}) 21M(12n)

负数 1.0 X X . . X 1.0XX..X 1.0XX..X 的形式。其最大值表示为 1. 01...1 ⏟ n 1.\underbrace{01...1}_n 1.n 01...1 ,最小值表示为 1.00..0 1.00..0 1.00..0 。尾数的表示范围为 − 1 ≤ M ≤ − ( 1 2 + 2 − n ) -1\le M\le -(\frac{1}{2}+2^{-n}) 1M(21+2n)

浮点数可表示范围

阶码和尾数均用补码 表示,阶码部分共 K + 1 K+1 K+1 为(含1位阶符),尾数部分共 n + 1 n+1 n+1 位(含1位数符),则这样的浮点数的表示范围是多少

浮点数阶码尾数真值
(规格化)最大正数 0 , 1 ⋯ 1 ⏟ K 0,\underbrace{1\cdots 1}_K 0,K 11 0. 11 ⋯ 11 ⏟ n 0.\underbrace{11\cdots 11}_n 0.n 1111 ( 1 − 2 − n ) × 2 2 k − 1 (1-2^{-n})\times 2^{2^k-1} (12n)×22k1
最小正数 1 , 0 ⋯ 0 ⏟ K 1,\underbrace{0\cdots 0}_K 1,K 00 0. 00 ⋯ 01 ⏟ n 0.\underbrace{00\cdots 01}_n 0.n 0001 2 − n × 2 2 − k 2^{-n} \times 2^{2^{-k}} 2n×22k
规格化最小正数 1 , 0 ⋯ 0 ⏟ K 1,\underbrace{0\cdots 0}_K 1,K 00 0 , 10 ⋯ 0 ⏟ n 0,\underbrace{10\cdots 0}_n 0,n 100 2 − 1 × 2 − 2 k 2^{-1}\times 2^{-2^{k}} 21×22k
(规格化)最小负数 0 , 1 ⋯ 1 ⏟ k 0,\underbrace{1\cdots 1}_k 0,k 11 1. 00 ⋯ 00 ⏟ n 1.\underbrace{00\cdots 00}_n 1.n 0000 ( − 1 ) × 2 2 k − 1 (-1)\times 2^{2^k-1} (1)×22k1
最大负数 1 , 0 ⋯ 0 ⏟ K 1,\underbrace{0\cdots 0}_K 1,K 00 1. 11 ⋯ 11 ⏟ n 1.\underbrace{11\cdots 11}_n 1.n 1111 − 2 − n × 2 − 2 k -2^{-n}\times 2^{-2^k} 2n×22k
规格化最大负数 1 , 0 ⋯ 0 ⏟ K 1,\underbrace{0\cdots 0}_K 1,K 00 1. 01 ⋯ 11 ⏟ n 1.\underbrace{01\cdots 11}_n 1.n 0111 − ( 2 − n + 2 − 1 ) × 2 − 2 k -(2^{-n}+2^{-1})\times 2^{-2^k} (2n+21)×22k
IEEE754

引入目的:增加数据的表示精度

格式

规格化的单精度浮点数: ( − 1 ) s × 1. M × 2 E − 127 (-1)^s\times 1.M\times 2^{E-127} (1)s×1.M×2E127

  • 尾数实际尾数为24
    在这里插入图片描述
类型数符s位数阶码E位数尾数M位数总位数阶码偏移值 ( 2 阶码位数 − 1 ) (2^{阶码位数-1}) (2阶码位数1)
单精度浮点数(float)18 ( − 126 ∼ 127 ) (-126\sim 127) (126127)2332127
双精度浮点数(double)11152641023
IEEE754移码

E − 127 = E 的二进制表示 + 10000001 E-127=E的二进制表示+1000 0001 E127=E的二进制表示+10000001

阶码真值=阶码无符号整数值-阶码偏移值

阶码无符号整数阶码真值(IEEE偏移值 − ( 2 n − 1 − 1 ) -(2^{n-1}-1) (2n11))
0000 00011-126
0000 00102-125
0111 11111270
1000 00001281
1111 1110254127

阶码全0和全1代表特殊含义

IEEE754浮点数范围
格式规格化的最小绝对值规格化的最大绝对值
单精度E=1;M=0; 1.0 × 2 1 − 127 = 1.0 × 2 − 126 1.0\times 2^{1-127}=1.0\times 2^{-126} 1.0×21127=1.0×2126E=254;M=.11…1; 1.11...1 × 2 254 − 127 = ( 2 − 2 − 23 ) × 2 127 1.11...1\times 2^{254-127}=(2-2^{-23})\times 2^{127} 1.11...1×2254127=(2223)×2127
双精度E=1;M=0; 1.0 × 2 1 − 1023 = 1.0 × 2 − 1022 1.0\times 2^{1-1023}=1.0\times 2^{-1022} 1.0×211023=1.0×21022E=2046;M=.11…1; 1.11...1 × 2 2046 − 1023 = ( 2 − 2 1023 ) × 2 1023 1.11...1\times 2^{2046-1023}=(2-2^{1023})\times 2^{1023} 1.11...1×220461023=(221023)×21023

阶码E全为0,尾数M不全为0——非规格化小数

阶码E全为0,尾数M全为0——真值0

阶码E全为1,尾数M全为0——无穷大

阶码E全为1,位数M不全为0——非数值

溢出

在这里插入图片描述

加减运算

在这里插入图片描述
在这里插入图片描述

强制类型转换

在这里插入图片描述

  • IEEE754尾数默认省略最高位1
  • int 类型转浮点数类型,若整数位数>24位,会有舍入误差
举例

i 是一个 int 型整数,fd 分别为 float 型(32位) 和 double (64位) 实数。判断各布尔表达式的布尔值

  1. i==(int)((double)i)

    true : int 32位有效数字,double为52+1=53位有效数字,所以强制转化为 double 类型后在转回去不会 发生精度损失

  2. f == (float)((int)f)

    false: float 型有小数部分,转为int后可能没有小数部分

    float转为int有32位有效数字,再转回float后,可能丢失有效数字

  3. f == (float)((double)f)

    true: double比float精度高,float转为double不会丢失精度

  4. d == (double)((float)f)

    false: float尾数有效位数小于double,所以 (float)f 会丢失精度,再转回 double后,不相等

在这里插入图片描述

1.4 运算器构造与功能

在这里插入图片描述
在这里插入图片描述

1.5 加法器

1.5.1 一位全加器FA

作用:求本位和、进位
在这里插入图片描述

1.5.2 串行加法器

作用:完成两个n位二进制数的加法

在这里插入图片描述
在这里插入图片描述

1.5.3 并行加法器

C i = A i B i + ( A i ⊕ B i ) C i − 1 C i − 1 = A i − 1 B i − 1 + ( A i − 1 ⊕ B i − 1 ) C i − 2 \begin{aligned} &C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}\\ &C_{i-1}=A_{i-1}B_{i-1}+(A_{i-1}\oplus B_{i-1})C_{i-2} \end{aligned} Ci=AiBi+(AiBi)Ci1Ci1=Ai1Bi1+(Ai1Bi1)Ci2

根据进位计算公式,发现当前公式中进位是上一公式计算得出的,而上一公式中的进位是由其上一位公式计算的出的。最终可以展开到 C 0 C_0 C0 ,这样 C i C_i Ci 就不需要等待 C i − 1 C_{i-1} Ci1 计算完成后再进行计算。

串行连接

将n个并行全加器串接起来,就可进行两个n位数相加

串行进位又称行波进位,每一级的进位直接依赖于前一级的进位,即进位信号是逐级形成的

  • 运算的速度取决于进位产生和传递速度
并行连接

并行进位的并行加法器(先行进位,同时进位):各级进位信号同时生成

G i = A i B i P i = A i ⊕ B i C i = A i B i + ( A i ⊕ B i ) C i − 1 = G i + P i C i − 1 C 1 = G 1 + P 1 C 0 C 2 = G 2 + P 2 C 1 = G 2 + P 2 ( G 1 + P 1 C 0 ) C 3 = G 3 + P 3 C 2 = G 3 + P 3 ( G 2 + P 2 ( G 1 + P 1 C 0 ) ) … \begin{aligned} &G_i=A_iB_i\quad P_i=A_i\oplus B_i\\ &C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}=G_i+P_iC_{i-1}\\ \\ &C_1=G_1+P_1C_0\\ &C_2=G_2+P_2C_1=G_2+P_2(G_1+P_1C_0)\\ &C_3=G_3+P_3C_2=G_3+P_3(G_2+P_2(G_1+P_1C_0))\\ &\dots \end{aligned} Gi=AiBiPi=AiBiCi=AiBi+(AiBi)Ci1=Gi+PiCi1C1=G1+P1C0C2=G2+P2C1=G2+P2(G1+P1C0)C3=G3+P3C2=G3+P3(G2+P2(G1+P1C0))

  • G i G_i Gi 为进位产生函数,当 G i = = 1 G_i==1 Gi==1 时,一定会产生进位
  • 进位传递函数:当 A i A_i Ai B i B_i Bi 只有一个1,会把 C i − 1 C_{i-1} Ci1 传递到高位 C i C_i Ci
    在这里插入图片描述
    根据进位函数,构造 先行进位电路CLA
ALU

在这里插入图片描述

1.5.4 分组并行进位加法器

单级先行进位

组内并行、组件串行

在这里插入图片描述

由于并行加法器在计算进位时,越高位用到的逻辑门元件越多,而 C 1 ∼ C 4 C_1\sim C_4 C1C4 的产生速度很快, 所以将一个4位CLA作为一个组,组内进位可同时得出,产生一个组进位

C 1 = G 1 + P 1 C 0 C 2 = G 2 + P 2 C 1 = G 2 + P 2 ( G 1 + P 1 C 0 ) C 3 = G 3 + P 3 C 2 = G 3 + P 3 ( G 2 + P 2 ( G 1 + P 1 C 0 ) ) C 4 = G 4 + P 4 C 3 = G 4 + P 4 ( G 3 + P 3 ( G 2 + P 2 ( G 1 + P 1 C 0 ) ) ) \begin{aligned} &C_1=G_1+P_1C_0\\ &C_2=G_2+P_2C_1=G_2+P_2(G_1+P_1C_0)\\ &C_3=G_3+P_3C_2=G_3+P_3(G_2+P_2(G_1+P_1C_0))\\ &C_4=G_4+P_4C_3=G_4+P_4(G_3+P_3(G_2+P_2(G_1+P_1C_0)))\\ \end{aligned} C1=G1+P1C0C2=G2+P2C1=G2+P2(G1+P1C0)C3=G3+P3C2=G3+P3(G2+P2(G1+P1C0))C4=G4+P4C3=G4+P4(G3+P3(G2+P2(G1+P1C0)))
只有得到前一组的进位信号,本组才可以计算

ALU

在这里插入图片描述

多级先行进位

组内并行,组件并行

多个组的进位信号同时产生
在这里插入图片描述

ALU

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AmosTian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值