第一章 单片机基础知识
第四节 码制
1.4 码制
实际的数值是带有符号的,既可能是正数,也可能是负数,正数符号用“+”号表示,负数符号用“-”表示,运算的结果可能是正数,也可能是负数。于是在计算机中就存在着如何表示正、负数的问题。
由于计算机只能识别0和1,因此在计算机中通常把一个二进制数的最高位作为符号位,以表示数值的正与负(若用8位表示一个数,则D7位为符号位;若用16位表示一个数,则D15位为符号位),并用0表示“+”,用1表示“-”。带符号数通常分成原码、反码和补码,见表1-8。
实际的数值是带有符号的,既可能是正数,也可能是负数,正数符号用“+”号表示,负数符号用“-”表示,运算的结果可能是正数,也可能是负数。于是在计算机中就存在着如何表示正、负数的问题。
由于计算机只能识别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码。只有定义、使用该数据的程序员才知道它的真值。