4.1 常用码制
数字逻辑工作在开关状态下,即二进制状态。为了满足不同的运算需求,人们又制定了使用八进制、十进制和十六进制表示数字的规则。十进制是日常生活中经常使用到的一种记数规则。
4.1.1 二进制码制
二进制是以2为基数的进位制,即逢2进1,如表4.1所示。在计算机系统中,采用二进制记数规则。这是因为采用二进制记数,只使用0和1两个数字符号,这样非常简单方便,并且很容易通过半导体元器件实现逻辑0和逻辑1两个状态。通过将0和1进行组合,就可以表示任意一个二进制数。
为了表示方便,在C/C++语言中,二进制数以0b开头,如0b1011、0b010111;在汇编语言中,二进制数以B/b结尾,如1011B/1011b、010111B/01011b。
4.1.2 十进制码制
十进制是以10为基数的进位制,即逢10进1,如表4.1所示。在十进制记数规则中,只出现0~9这十个数字。通过将这些数字进行组合,就可以表示任意一个十进制数。
在计算机系统中,对十进制数的表示没有特殊的要求。
4.1.3 八进制码制
八进制是以8为基数的进位制,即逢8进1,如表4.1所示。在八进制记数规则中,只使用0~7这八个数字。通过将这些数字进行组合,就可以表示任何一个八进制数。
为了表示方便,在C/C++语言中,八进制数以0开头,如0123、0675;在汇编语言中,八进制数以O/o结尾,如123O/123o、675O/675o。
4.1.4 十六进制码制
十六进制是以16为基数的进位制,即逢16进1,如表4.1所示。在十六进制记数规则中,只使用数字0~9和字母A/a、B/b、C/c、D/d、E/e、F/f表示。
表4.1 不同进制数之间的对应关系
注意:A/a、B/b、C/c、D/d、E/e、F/f对应于十进制数的10~15。
为了表示方便,在C/C++语言中,十六进制数以0x开头,如0x1234、0xE1DD;在汇编语言中,十六进制数以H结尾,如1234H、E1DDH。
注意:这种对应关系,只限制在非负的整数范围。对于负数整数的表示方法,将在后面进行详细的说明。
从表4.1中可以得出一些结论:
(1)为什么在十六进制计数系统中,大于9小于16的数字使用字符A/a、B/b、C/c、D/d、E/e、F/f表示?这是因为如果不用A/a表示10,而用10表示的话,会出现理解上的错误,十六进制中的10对应于十进制数16,而不是对应于十进制数的10。
(2)观察八进制计数系统,八进制的0~7分别对应于二进制低三位的000~111;八进制的10~17也分别对应于二进制计数系统中低三位的000~111。也就是说,连续的八进制数,其循环周期为8。因此,如果将二进制数从最低位开始,每三个数字为一组进行划分,就可以将二进制数转换成八进制数。例如,对于一个二进制数10011000010,将其从最低位开始,每三个数字划分为一组,得到划分后的二进制数“10,011,000,010”,可以直接得到所对应的八进制数2302。
(3)观察十六进制计数系统,十六进制的0~F分别对应于二进制低四位的0000~1111;十六进制的10~1F也分别对应于二进制计数系统中低四位的0000~1111。也就是说,连续的十六进制数,其循环周期为16。因此,如果将二进制数从最低位开始,每四个数字为一组进行划分,就可以将二进制数转换成十六进制数。例如,对于一个二进制数10011000010,将其从最低位开始,每四个数字划分为一组,得到划分后的二进制数“100,1100,0010”,可以直接得到所对应的十六进制数4C2。
4.1.5 BCD码
BCD码(binary-coded decimal)也称二进码十进数或二-十进制代码,用4位二进制数来表示1位十进制数中的0~9这10个数码,BCD码是一种二进制数字编码形式,用二进制编码表示十进制代码。
BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的;无权BCD码有余3码、Gray码(注意:Gray码并不是BCD码)等。
1.8421
8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。与四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,不使用余下的六组编码。
2.5421和2421
5421 BCD码和2421 BCD码为有权BCD码,它们从高位到低位的权值分别为5、4、2、1和2、4、2、1。在这两种有权BCD码中,有的十进制数码存在两种加权方法,例如,5421 BCD码中的数字5,既可以用1000表示,也可以用0101表示;2421 BCD码中的数字6,既可以用1100表示,也可以用0110表示。这说明5421 BCD码和2421 BCD码的编码方案并不唯一。
3.余3码
余3码是8421 BCD码的每个码组加3(0011)形成的。常用于BCD码的运算电路中。
4.Gray码
Gray码也称循环码、格雷码,其最基本的特性是任何相邻的两组代码中,仅有一位数字不同,因而又叫单位距离码。