计算机系统基础-学习记录2

乘法运算

范围:
对于无符号型 0 ≤ x ∗ y ≤ ( 2 w − 1 ) 2 = 2 2 w − 2 w + 1 + 1 0\le x*y\le (2^w-1)^2=2^{2w}-2^{w+1}+1 0xy(2w1)2=22w2w+1+1,最高位能到2w位( 2 2 w 2^{2w} 22w会排到2w+1位,但减去的 2 w + 1 − 1 ≥ 1 2^{w+1}-1\ge 1 2w+111,所以最多能排到2w位)
对于二补数的最小乘积 x ∗ y ≥ ( − 2 w − 1 ) ∗ ( 2 w − 1 − 1 ) = − 2 2 w − 2 + 2 w − 1 x*y\ge(-2^{w-1})*(2^{w-1}-1)=-2^{2w-2}+2^{w-1} xy(2w1)(2w11)=22w2+2w1,最高位能到2w-1位( − 2 2 w − 2 -2^{2w-2} 22w2会排到2w-1位,加上符号位后排到2w位,而加上 2 w − 1 2^{w-1} 2w1后,最多排到2w-1位)
对于二补数的最大乘积 x ∗ y ≤ ( − 2 w − 1 ) 2 = 2 2 w − 2 x*y\le (-2^{w-1})^2=2^{2w-2} xy(2w1)2=22w2,最高位能到2w位,但只有x和y都取最小值时才会进位到这一位(原理同上)

需要延长字节才能保证计算结果的正确,这一点可以在"arbitrary precision"(高精度算法)包中得以实现

无符号型整数相乘

在C语言中,无符号型整数乘法运算(记作 U M u l t w ( u , v ) \mathrm{UMult}_w(u,v) UMultw(u,v))只保留原有的w位bits,高位的w位会被截断,即:
U M u l t w ( u , v ) = u ⋅ v m o d    2 w \mathrm{UMult}_w(u,v)=u\cdot v \mod 2^w UMultw(u,v)=uvmod2w

有符号型整数相乘

与无符号型相似,也是截断高位的w位,留下剩下的w位,记作 T M u l t w ( u , v ) \mathrm{TMult}_w(u,v) TMultw(u,v)

移位

左移位:乘法

u<< k的结果为 u ∗ 2 k u*2^k u2k(无符号型和二补数都一样)
移位后截去最高k位: U M u l t w ( u , 2 k ) \mathrm{UMult}_w(u,2^k) UMultw(u,2k) T M u l t w ( u , 2 k ) \mathrm{TMult}_w(u,2^k) TMultw(u,2k)

右移位:除法

对于无符号型,使用逻辑移位时,u>>k的结果为 ⌊ u / 2 k ⌋ \lfloor u/2^k\rfloor u/2k

对于二补数,使用算术移位时,u>>k的结果为 ⌊ u / 2 k ⌋ \lfloor u/2^k\rfloor u/2k
对于负数而言,需要 ⌈ u / 2 k ⌉ \lceil u/2^k \rceil u/2k的结果(向0取整),因此可以使用 ⌊ ( x + 2 k − 1 ) / 2 k ⌋ \lfloor (x+2^k-1)/2^k \rfloor (x+2k1)/2k进行计算,即:(x+(1<<k)-1)>>k

浮点数

如何表示

整数的最低位 b 0 b_0 b0右侧 b − 1 ,   b − 2 ,   … ,   b − j b_{-1},\ b_{-2},\ \dots,\ b_{-j} b1, b2, , bj,权重分别为 2 − 1 ,   2 − 2 ,   … 2^{-1},\ 2^{-2},\ \dots 21, 22, ,因此,浮点数可以表示为: ∑ k = − j i b k × 2 k \sum\limits_{k=-j}^i b_k\times 2^k k=jibk×2k

浮点数的位置表示形式为:
b m b m − 1 ⋯ b 1 b 0 . b − 1 b − 2 ⋯ b − n + 1 b − n b_m b_{m-1}\cdots b_1 b_0.b_{-1}b_{-2}\cdots b_{-n+1}b_{-n} bmbm1b1b0.b1b2bn+1bn

只能精确表示 x × 2 y x\times 2^y x×2y形式的数,对于 1 5 \frac{1}{5} 51之类的数只能近似表示

IEEE浮点数标准

使用位置表示来描述浮点数时,难以描述非常大的数字,因此,使用 x × 2 y x\times 2^y x×2y的形式来表示。

IEEE确立了浮点型标准,使用3部分(参数)来表示: V = ( − 1 ) s × M × 2 E V=(-1)^s\times M\times 2^E V=(1)s×M×2E。其中,s用于决定正负,M表示[0, 1- ϵ \epsilon ϵ]或[1, 2- ϵ \epsilon ϵ]之间的值( ϵ \epsilon ϵ表示小量),E表示指数。

精度选项

单精度,由32-bits组成:s:1-bit;exp:8-bits;frac:23-bits;
双精度,由64-bits组成:s:1-bit;exp:11-bits;frac:52-bits;

其中,exp与E不同,frac与M不同,都有一定的转换关系

两种精度的图示如图1所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYcsWVeD-1601122286174)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20200926193654214.png)]

图1

根据exp值的不同,可以将这样的表示分为三类:规格化值、未规格化值、特殊值

规格化值(normalized)

此时, e x p ≠ 000...0 exp\neq 000...0 exp=000...0,且 e x p ≠ 111...1 exp\neq111...1 exp=111...1

E=exp-Bias
其中,Bias= 2 k − 1 − 1 2^{k-1}-1 2k11,k为指数部分所占的bits数
对于单精度而言, B i a s = 2 8 − 1 − 1 = 127 Bias=2^{8-1}-1=127 Bias=2811=127 e x p = 1 ∼ 254 exp=1\sim 254 exp=1254,则 E = e x p − B i a s = − 126...127 E=exp-Bias=-126...127 E=expBias=126...127
对于双精度而言, B i a s = 2 11 − 1 − 1 = 1023 Bias=2^{11-1}-1=1023 Bias=21111=1023 e x p = 1 ∼ 2046 exp=1\sim 2046 exp=12046,则 E = e x p − B i a s = − 1022...1023 E=exp-Bias=-1022...1023 E=expBias=1022...1023

M=1.xxx…x 2 _2 2
其中,xxx…x表示frac区域的值
当frac=000…0时,M取最小值1.0
当frac=111…1时,M趋近于最大值2.0,即M= 2.0 − ϵ 2.0-\epsilon 2.0ϵ

使用biases的原因:需要进行比较操作,比较指数。如果全部移到正数,就很容易进行比较(使用一个与门即可比较)

举例:对于浮点数F=15213.0:
15213.0 10 _{10} 10=11101101101101 2 _2 2=1.1101101101101 2 × 2 13 _2\times 2^{13} 2×213
M=1.11101101101101 2 _2 2,frac=111011011011010000000000 2 _2 2(后面的位数用0补齐)
E=13,Bias=127,exp=140=1001100 2 _2 2
则最后F的表示形式如图2所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsgUtklI-1601122286178)(C:\Users\蔡三圈\AppData\Roaming\Typora\typora-user-images\image-20200926195907900.png)]

图2

非规格化值(denormalized)

此时,exp=000…0

E=1-Bias(与规格化值的E=exp-Bias不同)

M=0.xxx…x 2 _2 2

当exp=000…0,frac=000…0时,表示的是0
当exp=000…0,frac ≠ \neq = 000…0时,表示的是接近0的数

特殊值(special)

此时,exp=111…1

当exp=111…1,frac=000…0时,表示的是无穷大(包括正溢出和负溢出)
当exp=111…1,frac ≠ \neq = 000…0时,表示的是非数(Not-a-Number, NaN)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值