一补数与二补数

发布时间:2018-07-01 22:15:22

一补数与二补数(1's Complement and 2's Complement)

二补数 (2's complement) :是一种用二进位表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。

一个数字的二补数就是将该数字作位元反向运算(即一补数),再将结果加 1,即为该数字的二补数。
在二补数系统中,一个负数就是用其对应正数的二补数来表示。

优点:二补数系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。
          只要一种加法电路就可以处理各种有号数加法,而且减法可以用一 个数加上另一个数的二补数来表示,因此只要有加法电路及二补数电路即可完成各种有号数加法及减法,在电路设计上相当方便。

特点:二补数系统的 0 只有一个表示方式,这点和一补数系统不同(在一补数系统中,0 有二种表示方式),因此在判断数字是否为 0 时,只较比对一个不同的条件即可。

补数和负数

再转载一篇补数和负数,将知识整理补充全面。转自:【The Life, The Code

补数表示法

     1. 补数的意义:在计算机执行算术运算时,对于减法运算,为求简化电路的设计起见,均使用补数(Complement) 的原理,使减法运算利用补数及加法运算来取代。

     2. 补数的定义:对任一以 b 为基底 (Base, Radix) 的非负数 N,存在有二种补数表示法,即 b's 补数及 (b-1)'s 补数,兹分述于下:

        a. b's 补数定义

            N 为一以 b 为基底的非负数,设其整数部份含有 n 位元,小数部份含有 m 位元,则 N b's 补数定义为

               bn - N (N0)
               0      (N = 0)

           注:此定义可避免出现两种不同的表示式来代表 0

           例:若一正数 N=31.4,且基底 b=9,则其 9's 补数可如下求出:

           解:由题意知整数部份 n=2,小数部份 m=1,代入公式可得

                   92 - 31.4 = (100)9 - (31.4)9 = (57.5)9

        b. (b-1)'s 补数定义

            N 为一以 b 为基底的非负数,设其整数部份含有 n 位元,小数部份含有 m 位元,

            N (b-1)'s 补数定义为

               bn - b-m - N

           注:此定义并未针对 N=0 特殊处理,因此会产生不同的 0 的表示式,造成溷淆。

           例:如上例,正数 N=31.4,基底 b=9,则 8's 补数可如下求出:

           解:由题意知整数部份 n=2,小数部份 m=1,代入公式可得

           92 - 9-1 - 31.4 = (100)9 - (0.1)9 - (31.4)9 = (57.4)9

        c. 根据上述定义,任何补数均可求得,惟需代公式求算嫌繁琐;因此一般均有较速简易的

           求补数方法,兹分述如下:

           (i)  (b-1)'s 补数求法

                将每一位元以 (b-1) 减去其值,即可得 (b-1)'s 补数。

           (ii) b's 补数求法

                (b-1)'s 补数之最小一位加 1 即可得 b's 补数。

                b's的补数值=(b-1)'s补数值+(最小位加1)

                注:二进位数值求 1 的补数,只要将原来数值中位元为 1 的改为 0,位元为 0 的改为 1

               便可得 1 的补数,至于 2 的补数则只需将 1 的补数值的最小位加 1 即可。

               范例:计算二位数之 1's 补数及 2's 补数

               (1) 1010101   (2) 10000

               注:常考题:求二进位的一补数 (1's complement) 或二补数 (2's complement)

负数表示法

      假设有一正数X其在二进位数字系统中表示如下:

          X=0Xn-2Xn-3......X1X0

      其中符号位元 0 代表此值为正数, Xn-2Xn-3......X1X0表示此正数在计算机中的二进位值。

      注:正数衹有上述一种唯一的表示法。

           在计算机中,常见的负整数表示法有以下三种

           (1)符号大小值法(Sign Magnitude)

           (2)一补数法(1's complement)  

           (3)二补数法(2's complement),兹分述于下:

      (1) 符号大小值法:

            -X=1Xn-2Xn-3......X1X0

            其中符号位元 1 代表此数为负数,此种表示法正数与负数之间衹有符号位元不同。

      (2) 一补数法

            此法是将二进位值(包含符号位元)取一补数。

            -X=1X'n-2X'n-3......X'1X'0

      (3) 二补数法

            此法是将二进位值(包含符号位元)取二补数。

            -X=1X'n-2X'n-3......X'1X'0 + 00.....001

            注:符号大小值法及一补数法有 +0 -0 的区别,而二补数法没有区别。

一补数与二补数

相关推荐