三种机器数,原码,补码,反码

来源:互联网 发布:无国籍人 知乎 编辑:程序博客网 时间:2024/05/29 14:00

     计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。

     无符号数:即没有符号的数,在寄存器中每一位均可用来存放数值。

     有符号数:即有符号的数,在寄存器中需要留出相应的位置来存放符号位。

  

      因此,即使寄存器的位数相同,甚至是在同一个寄存器中,所能表示的无符号数和有符号数的数值范围是不同的。对于同一串二进制码来说,看成有符号数,无符号数,原码,补码,正常来说,换算成十进制都是不一样的,而看成是哪一种码,则是由程序员来规定的。

 

原码:原码是机器数中最简单的一种表示形式,符号位为0的表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。

 

整数原码的定义:

        [x]原= 0,x  (2^n >x>=0)  

        [X]原 =2^n-x( 0>=x>-2^n)

 例子:

          当x=+1110 时,[x]原=0,1110

          当 x=-1110 时,[x]原 =2^4-(-1110)=1,1110 (用逗号将符号位和数值部分隔开)

 

   小数的原码定义:

         [x]原=x  (1>x>=0)   

         [x]原=1-x (0>=x>-1)

例子:

          当x=0.1101 时, [x]原=0.1101

          当x=-0.1101 时, [x]原=1-(-0.1101)=1.1101

根据以上的定义,如果已知原码,很显然就可以求真值了。

 

补码:补码的出现时为了更好的实现数值运算,因为如果用原来来计算你必须先确定数的正负,绝对值大小等。(大家可以去搜索一下补码是怎么来的,或者搜索一下补数的概念。)

整数补码的定义:

         [x]补=0,x  (2^n>x>=0)

         [x]补=2^(n+1)+x (0>x>-2^n)注意和原码的区别

例子:

         当 x=+1010 时, [x]补=0,1010

         当 x=-1101 时,[x]补=2^(n+1)+x =10000-1101=1,0011

小数的补码定义:

          [x]补= x  (1>x>=0)

          [x]补=2+x (0>x>=-1)

例子:

            当 x=0.1001 时, [x]补=0.1001

            当 x=-0.0110 时,[x]补=2+x=10.0000-0.0110=1.1010

 

反码 :反码通常用来作为由原码求补码或者由补码求原码的中间过渡。

     整数反码的定义:

          [x]反=0,x (2^n>x>=0)

          [x]反=(2^(n+1)-1)+x (x>=0>-2^n)

例子:

        当 x=+1101时,[x]反=0.1101

        当 x=-1101 时,[x]反=100000-1-1101=1,0010

   小数反码的定义:

        [x]反=x  (1>x>=0)

       [x]反=(2-2^(-n))+x  (0>=x>-1)

例子:

        当 x=+0.0110时,  [x]反=0.0110

        当 X=-0.0110时,  [x]反=10.0000-0.0001-0.0110=1.1001

 

PS:补码比原码,反码能多表示一个数 “-1”,请问这是为什么,提示:从”0”下手。

参考书籍:《计算机组成原理》作者:唐朔飞 , 高等教育出版社第二版

 

 

0 0
原创粉丝点击