负数的原码、补码

来源:互联网 发布:炫浪网络社区不能下载 编辑:程序博客网 时间:2024/09/21 09:20

1)负数的原码:符号位为1,数值位为其绝对值。

如下面的-97。

2)计算机和fpga使用的运算都是补码,而不是原码。不同bit的减法得到的结果一样。如果当然原码就错了。

例:不同位宽的两个数相减,fpga相减后,得到的两个结果。他们都表示的是-6,但是它不是-6的原码,而是-6的补码。

4bit     0-6 =-6                                            8bit      0-6 =-6

       0 0 0 0                                                    0 0 0 0  0 0 0 0

    - 0  1 1 0                                                 - 0 0 0 0  0  1 1 0

      1  0  1 0                                                   1 1 1 1  1  0 1 0

*****************************************************************************

-6的补码,进行求证,以上说法。

               4bit                                                  8bit

原码:   1 1 1 0                                          1  0 0 0  0 1 1 0

反码:   1  0 0 1                                         1  1 1 1  1  0 0 1

+                     1                               +                                1

补码       1 0  1 0                                         1 1 1 1   1 0  1 0

3)减法补位,根据结果的取值范围,如果需要多一位,则要补位。 需要用两个减数 和被减数的符号位取扩位,而不能用0去扩位。

例如:  log2_r,  log2_b  ,   取值范围-2~7.99, 定点化为    1 /20/16,

               diff_rb的取值范围为,-10~10,定点化为1/21/16。位宽的高位需要用符号位去扩展,而不能直接用0扩展。

 

 

 

4)x/(1280*720)

  IP核中也有除法,但latency很大,可以将其转化为乘法,x*小数。为了保留精度,将小数转化为2进制,分析小数前面有n个0,将小数先左移n位,小数变成整数y。

将x*y,然后将结果截取地位的nbit既可。

 

/*******************************************************************************************************************

以下部分是引用:

在计算机中,一个有符号数可以用原码、补码和反码表示。 
  
  1) 共同规律: 
  
  ① 用0表示正号,用1表示负号,且摆放在数据的最高位,有符号数和无符号数表示的根本区别在于无符号数的最高位是数值位,有符号数的最高位是符号位; 
  
  ② 同一正数的原、补、反码都相同。 
  
  ③ 定义区间均对模2n 而言,其中n表示有符号数的二进制代码位数。 
  
  2)其它规律: 
  
  ① 任一负数的原码和对应的正数(绝对值相等)的原码仅是符号位不同; 
  
  ② 任一负数的反码是对应的正数的反码的各位求反,反之亦然; 
  
  ③ 任一负数的补码是对应的正数的补码的各位求反,然后加1,反之亦然; 
  
  ④ 从定义区间上看 
  
  原码和反码的定义区间相同,是 –2n-1<X<2n-1; 
  
   补码的定义区间是 –2n-1≤X<2n-1; 
  
  ⑤ 0的原码、反码有+ 0和- 0之分; 
  
  0的补码只有一种表达方式。 
  
  例1:设X = +97 求[X]原、[X]反、[X]补 (mod 28) 
  
   解:97=1100001B 
  
   [X]原=01100001B; 
  
   [X]反=[X]补=01100001B。 
  
  例2:设X = -97, 求[X]原、[X]反、[X]补 (mod 28) 
  
   解:97=1100001B 
  
   [X]原=11100001B; 
  
   [X]反=10011110B; 
  
   [X]补=10011111B。 
  
  例3:设X = -137 求[X]原、[X]反、[X]补 (mod 29) 
  
   解:137=10001001B 
  
   [X]原=110001001B; 
  
   [X]反=101110110B; 
  
   [X]补=101110111B。 
  
  4. 补码、反码加减运算规则: 
  
   [X+Y]补=[X]补+[Y]补 [X+Y]反=[X]反+[Y]反 
  
   [X-Y]补=[X]补+[-Y]补 [X-Y]反=[X]反+[-Y]反 
  
   [-Y]补=[[Y]补]补 [-Y]反=[[Y]反]反 

0 0
原创粉丝点击