logo资料库

二进制补码、小数的补码及运算规则.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
二进制补码、小数的补码及运算规则 原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示 法在数值前面增加了一位符号位(即最高位为符号位):正数该位为 0,负数该 位为 1(0 有两种表示:+0 和-0),其余位表示数值的大小。 补码(two's complement) 1、在计算机系统中,数值一律用补码来表示(存 储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也 可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位) 有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。 一:整数的补码 1:求补码 1.1 正数的补码=原码 (就是其自身) 1.2 负数的补码=原码取反,最低位+1,符号位不变 (8bit 数值范围:-128~127, 0x10000000 对 应-128) Decimal Two's complement 127 64 1 0 −1 −64 −127 −128 0111 1111 0100 0000 0000 0001 0000 0000 1111 1111 1100 0000 1000 0001 1000 0000 2:补码对应的数值 2.1 正数的补码对应的数值直接计算 2.2 负数的补码对应的数值符号位不变,补码取反+1. (补码取反+1=其绝对值,也叫真值)
3:补码的运算 [X+Y]补 = [X]补 + [Y]补 [X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补 例:-7-(-10) [十进制] -7 的补码:11111001 -10 的补码:11110110 -(-10):按位取反再加 1 实际上就是其负值的补码,为 00001010 -7 - (-10)= -7 + 10 = 3 11111001+00001010 = 00000011 转换成十进制为 3 【X*Y】补=【X】补×【Y】补,即乘数(被乘数)相乘的补码等于补码的相乘。 Notes: 特别需要注意,需要做符号扩展:Nbit 乘数 和 Nbit 被乘数 都符号扩展到 2Nbit,再直 接相乘即可。 The product of two N-bit numbers requires 2N bits to contain all possible values. If the precision of the two two's-complement operands is doubled before the multiplication, direct multiplication (discarding any excess bits beyond that precision) will provide the correct result. For example, take 6 × −5 = −30. First, the precision is extended from 4 bits to 8. Then the numbers are multiplied, discarding the bits beyond 8 (shown by 'x'): 00000110 × 11111011 (6) (−5) ========== 110 1100 00000 110000 1100000 11000000 110000000 1100000000 ========== 10111100010 (−30)
二:小数 Fraction 的补码 (这里针对 FSL DSP 中的 Fraction) 小数 Fraction: 最高位为符号位,小数点就在符号位之后,其后的第一位为 1/2,再后一位为 1/4, 再其后 1/8,1/16… 依此类推 正小数的补码=原码 负小数的补码=原码取反,最低位+1,符号位不变 1.111 负(.000+1) = - 1/8 0.100  0.5 小数补码的乘法:符号扩展,直接相乘,结果左移一位(小数相乘后,需要左移一位) SC3850_CRM_RevB.pdf B-545 1)符号扩展,直接相乘 0000 2000(Hex) * FFFF C000(Hex) = 1FFFF8000000(Hex) 2) 结果左移 1 位 1FFFF8000000(Hex) <<1 = 3FFFF0000000 (Hex) 3) 取最低 32 位,(这个例子中前面是符号扩展) =F000 0000
分享到:
收藏