图片来源:南京大学软件学院COA课程PPT
©author:zzb
文章目录
7 二进制编码的十进制数运算
NCBD码用于解决精度和范围之间的矛盾,但代价是数字位数过多
加法
-
对发生10进位的要补上6,如1010为十进制的10,补上0110,就利用16进制的进位实现了十进制的进位
-
对于红色1,是加法本身已经超过16,发生了进位到前面一位,同样要加6,补上因为进位而丢失的6
-
即发生了16进制的进位或者值超过9,那么都需要进行补6操作(其中发生16进制的进位,会出现上面红色的1,这时候补6,一定不会再发生进位.值超过9,不会出现红色的1,但补6后仍然会发生16进制的进位,因此还是会产生红色的1,即两种情况都会进一位到高位)
如果要超过10,第4位必须是1,第2和第3位中至少有一个是1,因此会有上面的两个与门
两个与后的结果再和高位进位一起通过或门,这样就有3种情况会出现满10进位了,也就要加上0110,即6,所以C4后面有连出两条线给S2,S1
此外只要判断一次就可以了,因为即使是最大的结果19(9+9+1(1来自前一位的进位))加上6后,结果是25,25-16=9,结果9并不会再进位
减法
这里原理和原码计算一样,但是把2n改成10n,9999……-x+1
先取反再加10和先加6后取反是一样的,均可,倾向于先各位加6再取反
如果不够减10n,那么就提个负号出来,使得第一个数的符号位变反,即res-10n变成-(10n-res),这样用取反加1表示即可
如果够减10n即产生了高位的进位,那么舍弃进位即可,符号取第一个数的符号
总结
[外链图片转存中…(img-4M2Nc7wG-1656554644871)]