C--补码

时间:2014-04-30 03:47:47   收藏:0   阅读:520

C--补码

0 字节和位
位运算:对数据的二进制位进行处理的运算。
    字节byte数据存取和数值计算的基本单元。
              从内存中读取数据是以字节为单位,
              向内存中写入数据也是已字节为最小单位,
              将数值输出到文件和从文件获取数值时,最小单位也是字节。
    位:大部分操作系统中,一个字节由8个位组成。
    字长word
 
1 原码和补码:
在一个固定值的模mod下,一个数加另一个数正好可以归零,那么他们就互为补数
在操作系统中,数值一律用补码来存储。
计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。
       模:把一个计量单位称之为模或模数。
               
    机器数:数的符号和值均采用二进制的表示形式。【机器数在定点机浮点机中的表示形式各不相同。】
            这里的机器数均指在定点整数机中的表示形式。
           【最高位是符号位(0表示正数,1表示负数),其余位为数值位,小数点约定在数值位之后
            在计算机中,机器数有原码、反码、补码、变形原码、变形反码、变形补码和移码等多种形式。
    机器数的真值:采用+和-表示的二进制数。【就是就是一种用正负号+二进制的数值表示数的方式】
    原码true form:一个数值的二进制值。最高位为符号位,其余位为数值位。
                   原码能表示的数的范围:
                       1,111,1111~1,000,0000 0,000,0000~0,111,1111
                             -127~-0                 +0~127   共256个  
  
    非负数的补码:与原码相同。
    负数的补码:符号位为1,其余位为该数绝对值的原码按位取反后,再加1.
           8位2进制,1位用于表示符号,剩余7位表示数值,它的模数为2^7=128。

   例:原码-> 补码  【8位机为例
   十进制数      原码       补码
      11       0000,1011    0000,1011
     -15       1000,1111    (1111,0000+1)=1111,0001
 
   例:补码 ->原码
已知一个数的补码,其求原码的过程,与已知原码求补码的过程完全一样。
   进制数     码       
      11      0000,1011    0000,1011
     -15      1111,0001    (1,000,1110+1)=1000,1111

使用补码计算时,可以将符号位和其他位统一处理。

二进制     十进制  机器数(也是原码)   机器数的真值     反码         
0000,0000    0        0,000,0000         +0          0,000,0000   0,000,0000<---|            
0000,0001    1        0,000,0001          1          0,000,0001    0,000,0001    |
0000,0010    2        0,000,0010          2          0,000,0010    0,000,0010    |
0000,0011    3        0,000,0011          3          0,000,0011    0,000,0011    |
...                                                                      |
0111,1101    125      0,111,1101         125         0,111,1101    0,111,1101   |
0111,1110    126      0,111,1110         126         0,111,1110    0,111,1110   |
0111,1111    127      0,111,1111        127        0,111,1111    0,111,1111    |
                                                                      |
                                   【+0和-0的补码都为0000,0000】          |
                                                                      |
1000,0000    128      1,000,0000       -0          1,111,1111    0,000,0000----|
1000,0001    129      1,000,0001        -1           1,111,1110    1,111,1111
1000,0010    130      1,000,0010        -2           1,111,1101   1,111,1110
1000,0011    131      1,000,0011        -3           1,111,1100   1,111,1101
...
1111,1110    253      1,111,1101        -125         1,000,0010   1,000,0011
1111,1110    254      1,111,1110        -126         1,000,0001   1,000,0010
1111,1111    255      1,111,1111       -127         1,000,0000    1,000,0001
                                  (-128) 多余补码形式的数】 1,000,0000   -128

    补码的设计目:
       ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
       ⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计.
 
   例:补码的乘法运算
   十进制数     原码         补码
     -11 ---- 1000,1011----1111,0101
    × 10 ----0000,1010 ----0000,1010 ×
   -------------------------------------- 
    -110                            0
      |                         11110101
                                              0         
      |                    11110101
      |                 --------------
      |                        100110010010
      | ---- 1110,1110 ----1001,0010
 
 

C--补码,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!