计算机组成原理复习(二):2.运算方法和运算器(一)

2.运算方法和运算器(一)

数据与文字的表示方法

数的机器码(原、反、补、移)

原码

比如,+7表示为0 111,-5表示为1 101

最高位是符号位,其余是数值位

需要注意的是:在原码中,“[0]原”有两种表示,一种是+0,一种是-0

反码

如果符号位是0(正数),反码和原码保持一致;如果符号位是1(负数),就是将原码的数值部分取反,符号位保持不变

比如:

[+0]原 = 0 0000000 → [+0]反 = 0 0000000

[-0]原 = 1 0000000 → [+0]反 = 1 1111111

补码

定义:把某数X加上模数M,称为以M为模的X的补码。

联想钟表,假如此时4点,但表是7点,我们可以退3格,也可以进9格,也就是-3=+9(mod 12)

说白了,就是把负数的部分,挪到正数部分的后头,原来贴近0的那部分负数,现在就跑到最大那边去了

在这里插入图片描述

转换方法:

  • 正数的话,原码 = 反码 = 补码

  • 负数的话,补码 = 反码 + 1

(技巧:找到最后一个是1的位,在这个位之前的所有位的取反,比如:+59是00111011,而-59是11000101)

特点:

  • 变减为加,且符号位由计算获得(千万记得原码到反码,符号位不变啊!!!!

  • 0的补码只有一个,就是n位的0

移码
  • 定义:在真值X上加上一个常数(偏移量),通常字长n+1时,偏移取2^n、
  • 转换方法:补码的第一位(符号位)取反,其余不变

一般就是用于浮点数的阶码表示了…

表示范围

2.1

数据格式

定点数的表示
  • 所谓定点,就是小数点位置固定不变

  • 通常表示为纯整数或者纯小数。

【Xn | Xn-1 Xn-2 ··· X1 X0】【符号|量值(尾数)】 共n+1位

如果是纯小数:
0 ≤ ∣ x ∣ ≤ 1 − 2 − n 0 ≤ |x| ≤ 1 - 2^-n 0x12n
如果是纯整数:
0 ≤ ∣ x ∣ ≤ 2 n − 1 0 ≤ |x| ≤ 2^n - 1 0x2n1
一般我们用纯整数,定点数表示的运算简称为整数运算

浮点数的表示
  • 所谓浮点,就是小数点随比例因子的改变而自由浮动
  • 数的范围精度分别表示

十进制:
N = 1 0 E . M N = 10^E.M N=10E.M
二进制:
N = 2 e . M N = 2^e.M N=2e.M
(M为尾数,e为比例因子的指数,2是基数)

标准格式

float【 S(31) | E(30~23) | M(22~0) 】

double【 S(63) | E (62~52)| M(51~0) 】

  • s=0,负数;s=1,正数
  • M是尾数,在小数点的右边
  • E是阶码,用移码表示正负指数,E = 指数真值e + 偏移127【01111111】
浮点数的三种表示
  • 一个非规格化的float x可以表示为:

x = ( − 1 ) s ∗ ( 0. M ) ∗ 2 E x = (-1)^s * (0.M) * 2^E x=(1)s(0.M)2E

为了提高数据表示的精度,当M不为0时,尾数域最高有效位应为1,也就是规格化表示:

  • ①对于原码表示的尾数(|M|≥1/2)

    • 正数:0.1xxx
    • 负数:1.1xxx
  • ②对于补码表示的尾数,当符号位和最高有效位相异

    • 正数:0.1xxx
    • 负数:1.0xxx
  • IEEE754标准(e = E - 127 or 1023)

2.4

正负浮点数表达式:
x = ( − 1 ) s ∗ ( 1. M ) ∗ 2 e x = (-1)^s * (1.M) * 2^e x=(1)s(1.M)2e
第一行最后应该是0,因符号位有±0之分

范围:

2.5

三种表示的比较

2.3

一些小练习😄

  • 8位的定点小数的补码所能表示的数据范围是:

    • [-(1-2^(-8)), 1-2^(-8)]

    • [-1, 1-2^(-7)](√)

    • [-1, 1-2^(-8)]

    • [-(1-2^(-7)), 1-2^(-7)]

解析:和原码、反码相比,用补码表示时,负半轴可以多表示一个数据!最小数补码为10000000,真值 -1;最大数补码为01111111,真值为1-2^(-7)

  • 将十进制数16.25转换成754标准的32位浮点数,其二进制的存储格式用十六进制表示为( )H。

解析:

  1. 首先把(16.25)10换成(10000.01)2,并且确认为正数,754标准的规格化浮点数
  2. 小数点前移4位至1.M格式:1.000001 * 2^4,即e=4,则E=4+127=131=1000 0011
  3. 【0|1000 0011|00000100…00】
  4. 最后转换:(0100 0001 1000 0010 0000 … 0000)bin = (41820000)hex
  • 有一个字长为32位的浮点数,符号位1位,阶码8位,用移码表示;位数23位,用补码表示。请写出:

    (1) 非规格化数能表示的最大正数、最小正数、最大负数和最小负数

    (2) 规格化数能表示的最大正数、最小正数、最大负数和最小负数

(1)非规格化数:[x=(-1)^s * (0.M) * 2^E]

        最大正数(原/补码)    0 11111111 111...1    真值为 +(1-2^-23)*(2^127)

        最小正数(原/补码)    0 00000000 000...1    真值为 +(2^-23)*(2^-128)=+2^-151

        最大负数(原码)   1 00000000 000...1    真值为 -(2^-23)*(2^-128)=-2^-151
        最大负数(补码)   1 00000000 111...1    

        最小负数(原码)    1 11111111 111...1    真值为 -(1-2^-23)*(2^127)
        最小负数(补码)    1 11111111 000...0    真值为 -2^127

(2)规格化数:

        最大正数(原/补码)    0 11111111 111...1    真值为 +(1-2^-23)*2^127

        最小正数(原/补码)    0 00000000 100...0    真值为 +(2^-1)*(2^-128)=2^-129

        最大负数(补码)    1 00000000 011...1    真值为 -(2^-23+2^-1)*(2^-128)
        最大负数(原码)    1 00000000 100...1    

        最小负数(补码)   1 11111111 000...0    真值为 -2^127
        最小负数(原码)   1 11111111 111...1    真值为 -(1-2^-23)*2^127
  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值