搜故事网,网罗全网精彩故事大全。找好故事就来搜故事网!
搜故事 > 故事会 > 正文

深入理解计算机系统cp2:定点数的表示和运算

时间:2020-09-25 08:36:01

相关推荐

深入理解计算机系统cp2:定点数的表示和运算

还是上面的例子,1011 1011,也就是11 11,我们考虑+11和 11,+11的原码=补码=01011, 11的原码是11011,因此补码是10101,那么01011+10101就会等于100000,因为寄存器是五位的,把前面的1去掉,那么结果就是00000,也就是0,和上面的运算结果一致。

3反码表示法

反码很好理解:

正数:反码等于原码等于补码;负数:反码等于原码保持符号位不变的情况下其余各位取反。也就是说,补码=反码+1反码的反码等于原码,这可以用来根据反码求原码。4移码表示法

补码存在的问题是,仅从补码本身来看,很难比较两个数的大小,为此引入了移码的概念。移码指的是在真值(二进制)的基础上加上一个偏移量,通常这个偏移量是2^n。其中,n是数值位的位数。例如,对于 10101,其移码是2^7+ 10101=10000000+010101=0,1101011。当然,我们有简单的方法可以计算一个数的移码:不管正数还是负数,其移码都等于补码的符号位取反。

2.定点数的加减运算2.1 补码的加减运算

定点数的加减运算实际上就是补码的加减运算。我们来看一个例子:

假设机器字长为 8 位(含1位符号位),A=15,B= 24,现在求 A+B 和 A B。

A 的补码是 0,0001111,B 的补码是 1,1101000,那么 0,0001111+1,1101000=1,1110111,转化为原码,再转化为真值,得到 9,这是正确的。同理,A B 就是 A+ B, B 的补码是 0,0011000,那么 0,0001111+0,0011000=0,0100111,最后转化为真值,得到 +39,这也是正确的。我们再来看另一个例子:

假设机器字长为 8 位(含1位符号位),A=15,B= 24,C=124,现在求 A+C 和 B C。

我们同样按照上面的流程来进行计算,最后得出:A+C 结果是 117,B C 结果是 +108,这两个都是错误的。为什么会出现这样的情况呢?

2.2 溢出

这种情况就叫溢出。出现的原因,简单来说就是:运算结果太大了,或者运算结果太小了。就上面的题而言,8 位二进制数所能表示的数字的范围是有限的,当正数加正数的时候,结果可能过大,超出了最大值,此时称为上溢;当负数加负数的时候,结果可能过小,够不到最小值,此时称为下溢。如下图所示:

我们拿 3 位二进制数来理解这个问题。假设 3 位二进制数可以表示的范围如下:

现在我们进行 2+2 操作,那么就是 010+010,结果就是 100,这已经超出了正数可以表示的最大范围,也就是发生了上溢。所以此时得到的是 4,这是一个错误的结果。

2.3 溢出的判断

前面说过,溢出的原因要么是运算结果太大,要么是运算结果太小,其实从这句话我们可以看出,正数和负数相加是不会发生溢出的,因为其结果必然在可以表示的范围内,唯一可能会发生溢出的情况,要么是正数加正数,要么是负数加负数。那么,如何判断在这两种情况下是否会发生溢出呢?有三个方法:

1 一位符号位:比较操作数符号位与结果数符号位

我们还是拿上面的第二个例子解释:

可以看到,A+C 中,两个操作数符号位都是 0,也就是都是正数,但结果数的符号位却是 1 ,也就是负数,那么很明显它发生了上溢;

同理,B C 中,两个操作数符号位都是 1,也就是都是负数,但结果数的符号位却是 0,也就是正数,那么很明显它发生了下溢。

2 一位符号位:看符号位与最高数值位的进位情况

看第一个式子,进行运算的时候,符号位没有产生进位,但是最高数值位向前产生了进位,这时候判断它发生了上溢;看第二个式子,进行运算的时候,最高数值位没有产生进位,但是符号位向前产生了进位,这时候判断它发生了下溢。

3 两位符号位:

这种方法是将一位符号位改为两位符号位表示:正数符号为 00,负数符号为 11。那么前面的例子就会变为:

这时候,计算机只需要看结果数就能知道是否发生溢出 —— 只要结果数的两位符号位相异,那么就一定是发生了溢出。同理,我们回过头看第一个没有溢出的例子:

可以发现两次运算的结果数的两位符号位都是一样的,由此判断这两次运算都没有发生溢出。

参考:结果数的两位符号位相异,那么就一定是发生了溢出。同理,我们回过头看第一个没有溢出的例子:

[外链图片转存中…img JkMna36Q 1586618783216]

可以发现两次运算的结果数的两位符号位都是一样的,由此判断这两次运算都没有发生溢出。

参考:https://www.bilibili.com/video/av66952721

看到此处说明本文对你还是有帮助的,关于“深入理解计算机系统cp2:定点数的表示和运算”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(2)
  1. lover。forever2022-07-03 05:22lover。forever[黑龙江省网友]43.243.26.77
    定点数的表示和运算虽然有点抽象,但通过细致的解读,让人觉得对计算机系统有了更深入的理解。
    顶0踩0
  2. 紫云空间(留言受限)2021-08-14 06:59紫云空间(留言受限)[河北省网友]115.166.70.188
    这章节讲解的内容非常重要,对计算机工程师来说是必备知识。
    顶13踩0
相关阅读
三年级数学《有余数的除法》教学故事

三年级数学《有余数的除法》教学故事

有余数除法规律 趣味故事

2010-07-24

三年级数学《有余数的除法》教学故事

三年级数学《有余数的除法》教学故事

有余数的除法小故事

2014-03-08

三年级数学《有余数的除法》教学故事

三年级数学《有余数的除法》教学故事

关于除法有余数的故事

2007-12-31

三年级数学《有余数的除法》教学故事

三年级数学《有余数的除法》教学故事

数学除法余数有趣故事

2011-02-28