定点数的运算【难】

定点数移位:就像你把一列数字队列向左或向右移动,但是要记住,队头和队尾的规则可能不一样。如果是有符号的数(比如温度,正数是热,负数是冷),移动的时候,队头的符号要保留,空出来的位置如果是向右就填上队尾的符号,向左就填0。如果是无符号的数(比如人数,只能是正数),空出来的位置就都填0。
加减法运算:
原码加减法:就像你在做算术题,如果两个数的符号相同,就把它们的大小加起来,符号不变;如果不同,就大的减去小的,结果的符号就和大的那个数一样。
补码加减法:这里的规则有点特别,所有的数都是用补码表示的,就是说正数和负数都按照正数的规则来加,如果结果超出了能表示的范围,超出的部分就扔掉,结果还是按照补码的形式存在。
符号扩展:这就像是你把一个小数点向右移动,需要在左边补上0来保持数的大小不变。如果是负数,补码的情况下,新的位置都要用1来填充。
溢出:这就像是你往一个有限容量的容器里倒水,如果水太多了,就会溢出来。在计算机里,如果计算的结果超出了它能表示的范围,就会发生溢出。判断溢出的方法是看符号位,如果两个数的符号相同,但结果的符号变了,那就是溢出了。

定点数乘法
想象一下,你有两个数字,它们可能是正数或负数。当你要把它们相乘时,你可以先不管正负号,只管数字的大小。这就像是你先数数两个数各自有多少个苹果,然后再决定最后是加还是减。
原码乘法:就像你先数数,然后看两个数的正负号,如果都是正的或者都是负的,结果就是正的;如果一个是正的一个是负的,结果就是负的。然后你把两个数的苹果数加起来。
补码乘法:这个稍微复杂一点,你不仅要数数,还要看每个数的正负号,然后决定是加还是减。如果两个数的正负号相同,你就做减法;如果不同,你就做加法。而且,你还要多加一个步骤,就是在乘数的末尾加一个0,然后再开始计算。
定点数除法
现在,我们来谈谈除法。就像你要把一堆苹果平均分给几个人。
原码除法:你先看两个数的正负号,如果都是正的或者都是负的,商就是正的;如果一个是正的一个负的,商就是负的。然后你把被除数的苹果数除以除数的苹果数。
补码除法:这个更复杂,你要看两个数的正负号,然后决定是加还是减。如果两个数的正负号相同,你就减;如果不同,你就加。然后你还要不断地调整余数,如果余数和除数的正负号相同,你就在商上加1;如果不同,你就在商上加0。
类型转换
最后,我们来说说类型转换,这就像是你要把一个大箱子里的苹果放到一个小箱子里,或者反过来。
无符号数和有符号数:这就像是你不管苹果是红的还是绿的,只管它们是不是苹果。
长整数变短整数:这就像是你把一个大箱子里的苹果放到一个小箱子里,但是小箱子装不下那么多,所以你只能留下一部分。
短整数变长整数:这就像是你要把一个小箱子里的苹果放到一个大箱子里,你要保持苹果的颜色不变,也就是保持正负号。

 

关联知识点
定点数移位运算
算数移位:对于有符号数的移位,符号位在移位后保持不变。如果向右移位,空位用符号位填充;如果向左移位,空位用0填充。
逻辑移位:对于无符号数的移位,无论是向左还是向右,空位都填充0。
循环移位:数据在指定位数内循环移动。分为带进位标志位和不带进位标志位的循环移位。
原码定点数的加减法运算
加法准则:如果两个数的符号相同,它们的绝对值相加,符号保持不变;如果符号不同,绝对值大的数减去绝对值小的数,结果的符号取绝对值大的数的符号。
减法准则:将减数的符号取反,然后按照原码加法运算规则进行计算。
补码定点数加减法运算
操作数以补码形式参与运算。
按照二进制规则进行运算,逢二进一。
符号位与数值位同时参与运算,符号位产生的进位被丢弃。
结果的符号由运算结果确定。
计算公式:[A+B](补) = [A](补) + [B](补),[A-B](补) = [A](补) + [-B](补)。
运算结果溢出时,溢出位被丢弃,结果仍然是补码。
符号扩展
正数:在原有的基础上,添加0以凑足所需的位数。
负数:
原码:将符号位扩展到新形式的符号位上,附加位填充0。
补码:新形式的附加位用1填充。
反码:新形式的附加位用1填充。
溢出概念和判别方法
上溢:运算结果大于可以表示的最大正数。
下溢:运算结果小于可以表示的最小负数。
补码判断溢出方法:
一位符号位:如果参与运算的两个数的符号相同,但结果的符号发生变化,则结果溢出。
双符号位(模4补码):
 00  表示正数,无溢出。
 01  表示正溢出。
 10  表示负溢出。
 11  表示负数,无溢出。
根据数据位进位判断:如果符号位进位与最高位进位相同,则无溢出。
定点数的乘法运算
原码一位乘法
绝对值运算:乘法运算时,被乘数和乘数都取其绝对值进行计算,最终结果的符号位由两个操作数的符号位异或决定。
部分积:部分积的长度与被乘数相同,初始值为0,取n+1位。
逐位相乘:从乘数的最低位开始,如果该位为1,则将被乘数的绝对值加到部分积上,然后部分积右移一位;如果为0,则部分积不变,直接右移一位。
重复操作:重复步骤3,直到乘数的所有位都被处理。
补码一位乘法
符号位参与:乘法运算时,符号位也参与计算,所有操作数都以补码形式表示。
双符号位:被乘数通常取双符号位参与运算,部分积也取双符号位,初始值为0。
附加位:乘数末尾增设一个附加位,初始值为0。
根据附加位操作:根据符号位的值来确定是进行加法还是减法操作。
补码右移:移位操作按补码的规则进行。
n+1步操作:按照上述算法进行n+1步操作,但第n+1步不进行移位。
定点数的除法运算
原码除法运算(不恢复余数法)
商的符号:由两个操作数的符号异或决定。
商的数值:商的绝对值等于被除数的绝对值除以除数的绝对值。
补码除法运算(加减交替法)
符号位参与:除法运算时,符号位也参与计算,除数和被除数都以补码形式表示,商和余数也用补码表示。
加减交替:如果被除数和除数符号相同,则进行减法;如果不同,则进行加法。
余数处理:根据余数和除数的符号关系,决定是将商加1还是保持不变,然后余数左移一位后进行相应的加减操作。
重复操作:重复执行上述步骤n次。
末尾恒置1:如果对商的精度没有要求,通常将商的末尾位恒置为1。
强制类型转换
无符号数与有符号数:转换时不改变数据内容,只改变数据的解释方式。
长整数变短整数:高位截断,只保留低位。
短整数变长整数:进行符号扩展,确保数据的符号位正确表示。

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值