您的位置 首页 > 数码极客

补码计算器、补码计算器小数…

乘法的应用千千万

• 浮点乘法和定点乘法的原理是相同的

• 早期处理器通过软件迭代

• 使用加法和移位

• 现代处理器都实现硬件乘法器

• 提高程序性能

硬件模拟软件的“移位-加”操作

• 两个N位数相乘,结果为2N位

• 使用3组触发器,锁存住乘数、被乘数和结果

• 乘数每次算术右移一位,被乘数每次算术左移一位

如果参与运算的是补码?

• 先判断结果符号位

• 将补码转为原码进行运算

• 补上符号位,转换回补码

• 太麻烦,不如自行推导补码乘法算法

• 问题: 已知[X] 补 和[Y] 补 ,求[X*Y] 补 .

• [X] 补 +[Y] 补 =[X+Y] 补 (方括号内为普通加法,方括号外为补码加法)

• 但[X] 补 *[Y] 补 !=[X*Y] 补

• 若[Y ] 补 =y 31 y 30 ......y 1 y 0 ,

• 则Y= -y 31 *2 31 + y 30 *2 30 +......+y 1 *2 1 +y 0 *2 0

已知[X] 补 和[Y] 补 ,求[X*Y] 补

[X*Y] 补 = [X*( -y 31 *2 31 +y 30 *2 30 +......+y 1 *2 1 +y 0 *2 0 )] 补

= [-X*y 31 *2 31 +X*y 30 *2 30 +......+X*y 1 *2 1 +X*y 0 *2 0 ] 补

= [-X*y 31 *2 31 ] 补 +[X*y 30 *2 30 ] 补 +......+[X*y 1 *2 1 ] 补 +[X*y 0 *2 0 ] 补

= - [X] 补 *(y 31 *2 31 ) +[X] 补 * (y 30 *2 30 ) +......+[X] 补 * (y 1 *2 1 ) +[X] 补 * (y 0 *2 0 ) ???

方括号内为普通加法,方括号外为补码加减(符号位扩充到64位再加)

定理:[X*2 k ] 补 =[X] 补 *2 k

• 运算时,根据y i 取0或1,进行操作

• 结果先置为0, [X] 补 扩展为64位

• 当i = 0 ... 30,若y i 为1,将[X] 补 左移i位,补码加法到结果

• 当i = 31,若y i 为1,将[X] 补 左移i位,补码减法到结果

• 和原码“移位-加”算法类似(除了最高位)

补码运算注意

• 符号位扩充到8位,结果保留8位

• 补码减法:按位取反加1(-11010000 = 00101111+1)

将之前的迭代加乘法器稍微修改,就可以实现补码乘法

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“补码计算器,补码计算器小数,补码计算器在线,二进制补码计算器,16进制补码计算器”边界阅读