12.16

来源:互联网 发布:msdb数据库 编辑:程序博客网 时间:2024/04/29 04:27

冯诺依曼机工作的基本方式的特点是按地址访问并顺序执行指令。

原码、反码和补码
    计算机中参与运算的数有正负之分,计算机中的数的正负号也是用二进制表示的。用二进制数表示符号的数称为机器码。常用的机器码有原码、反码和补码。

一、原码

求原码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位照抄。
【例1】X=+1001001   [X]原 = 01001001
【例2】X=-1001001   [X]原 = 11001001

二、反码

求反码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位按位取反。
【例3】X=+1001001   [X]反 = 01001001
【例4】X=-1001001   [X]反 = 10110110

三、补码

求补码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位按位取反后,最低位加1。
【例5】X=+1001001   [X]补 = 01001001
【例6】X=-1001001   [X]补 = 10110111

四、补码加减法
   计算机中实际上只有加法,减法运算转换成加法运算进行,乘法运算转换成加法运算进行,除法运算转换成减法运算进行。用补码可以很方便的进行这种运算。

1、补码加法
   [X+Y]补 = [X]补 + [Y]补
【例7】X=+0110011,Y=-0101001,求[X+Y]补
    [X]补=00110011  [Y]补=11010111
    [X+Y]补 = [X]补 + [Y]补 = 00110011+11010111=00001010
    注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是
        100001010,而是00001010。

2、补码减法
   [X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补
   其中[-Y]补称为负补,求负补的方法是:对补码的每一位(包括符号位)求反,最后末位加“1”。
【例8】X=+0111001,Y=+1001101,求[X-Y]补
    [X]补=00111001  [Y]补=01001101  [-Y]补 = 10110011
    [X-Y]补 = [X]补 + [-Y]补 = 00111001+10110011=11101100

五、数的表示范围
    通过上面的学习,我们就可以知道计算机如果用一个字节表示一个整数的时候,如果是无符号数,可以表示0~255共256个数(00000000~11111111),如果是有符号数则能表示-128~127共256个数(10000000~01111111)。如果两个字节表示一个整数,则共有65536个数可以表示,大部分程序设计语言中整数的范围都是-32768~32767的原因,可以看出这种整数类型是16位的有符号数,而且是补码表示的。