二进制补码计算 | 您所在的位置:网站首页 › 负数取反加一 › 二进制补码计算 |
位数问题
a_width位的a,乘以B_width位的b,结果的位数是A_width + B_width。 定点小数问题小数位数等于a的小数位数,加上b的小数位数之和。 补码相乘问题补码 * 补码 = 补码 符号问题 1、无符号数 * 无符号数 = 无符号数 2、无符号数 * 有符号数 = 有符号数 3、有符号数 * 无符号数 = 有符号数 4、有符号数 * 有符号数 = 有符号数 注意!上述符号关系仅适用于如下场景: 定义unsigned类型的变量,且人为规定该变量的最高位为符号位。 wire unsigned [3:0] data_a; //data_a[3]表示符号位 wire unsigned [3:0] data_b; //data_b[3]表示符号位 assign data_a = 4'b1100; //data_a = -4(当做有符号的负数) assign data_b = 4'b0100; //data_b = 4(当做有符号的正数,或无符号数) 算法原理为什么有的加数要两个符号位?有的加数的不用补符号位,而是选择经过取反+1后的乘法结果? 比如最后一个有符号位的乘法,为啥第四个加数与其他三个加数的行为不一致?? 解答上述问题需要先看一下二进制补码的一个重要特性: 这里-1表示符号位要用“负权重”,2^2的上标2表示该值要左移2位。 那么两个负数相乘时,我们以a×b = 1001×1100(即-7 × -4)为例说明:
https://www.allaboutcircuits.com/technical-articles/multiplication-examples-using-the-fixed-point-representation/ 这个博主写的非!常!清!晰!建议有需要的朋友细品!!! |
CopyRight 2018-2019 实验室设备网 版权所有 |