7 二进制编码的十进制数运算

图片来源:南京大学软件学院COA课程PPT

©author:zzb

7 二进制编码的十进制数运算

NCBD码用于解决精度和范围之间的矛盾,但代价是数字位数过多image-20210914180115014

image-20210915155218952

加法

image-20211012165334270

  • 对发生10进位的要补上6,如1010为十进制的10,补上0110,就利用16进制的进位实现了十进制的进位

  • 对于红色1,是加法本身已经超过16,发生了进位到前面一位,同样要加6,补上因为进位而丢失的6

  • 即发生了16进制的进位或者值超过9,那么都需要进行补6操作(其中发生16进制的进位,会出现上面红色的1,这时候补6,一定不会再发生进位.值超过9,不会出现红色的1,但补6后仍然会发生16进制的进位,因此还是会产生红色的1,即两种情况都会进一位到高位)

image-20211012165939633

如果要超过10,第4位必须是1,第2和第3位中至少有一个是1,因此会有上面的两个与门

两个与后的结果再和高位进位一起通过或门,这样就有3种情况会出现满10进位了,也就要加上0110,即6,所以C4后面有连出两条线给S2,S1

此外只要判断一次就可以了,因为即使是最大的结果19(9+9+1(1来自前一位的进位))加上6后,结果是25,25-16=9,结果9并不会再进位

减法

image-20211012172909448image-20220106114717172

这里原理和原码计算一样,但是把2n改成10n,9999……-x+1

先取反再加10和先加6后取反是一样的,均可倾向于先各位加6再取反

如果不够减10n,那么就提个负号出来,使得第一个数的符号位变反,即res-10n变成-(10n-res),这样用取反加1表示即可

如果够减10n即产生了高位的进位,那么舍弃进位即可,符号取第一个数的符号

image-20211219100203218

总结

image-20211219100209577

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
  • Copyrights © 2022-2024 zzb
  • RZ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信