您现在的位置:e-works > 智造书屋 > 书籍列表 > 51单片机快速上手 > 码制

第一章 单片机基础知识

第四节 码制

1.4  码制    

    实际的数值是带有符号的,既可能是正数,也可能是负数,正数符号用“+”号表示,负数符号用“-”表示,运算的结果可能是正数,也可能是负数。于是在计算机中就存在着如何表示正、负数的问题。
    由于计算机只能识别0和1,因此在计算机中通常把一个二进制数的最高位作为符号位,以表示数值的正与负(若用8位表示一个数,则D7位为符号位;若用16位表示一个数,则D15位为符号位),并用0表示“+”,用1表示“-”。带符号数通常分成原码、反码和补码,见表1-8。

    通常,计算机中用补码来表示带符号数。正数的补码同原码,负数的补码符号位为1,数值位为模减此数绝对值。补码的求法一般有两种:
    1)用补码定义式:
    [X]补=2n-|X|     -2n-1≤X≤0(整数)
    【例1-3】 X=-0101111B,n=8,求[X]补。
    解:[X]补 =28+(-0101111B)
    =100000000B-0101111B
    =11010001B(mod 28)
    在用补码定义式求补码的过程中,由于做一次减法很不方便,故该法一般不用。
    2)用原码求反码,再在数值末位加1可得到补码,即[X]补=[X]反+1。
    补码求法公式推导:
    设8位二进制数的模为28=256
    当X<0,[X]补=28-|X|=256-|X|=255-|X|+1
    =[X]反+1 
   【例1-4】 求+4和-4的原码、反码和补码。
   解:
    (1)X=+4[X]原=[X]反=[X]补=00000100B
    (2)X=-4[X]原=10000100B
    [X]反=11111011B
    [X]补=11111100B
    需要说明的是,计算机内的一组二进制编码和它们的“真值”之间存在着“一对多”的关系,如41H可以表示:有符号数+65的补码;无符号数65;大写字母“A”的ASCII码和十进制数41D的压缩BCD码。只有定义、使用该数据的程序员才知道它的真值。