- 计算机系统:从应用程序到底层实现
- 赵欢 杨科华编著
- 1424字
- 2025-05-07 10:52:32
2.1.2 二进制与其他进制
除了二进制外,实际上还有许多不同的进制,例如我们日常生活中经常用到的十进制。对于一个进制而言,首先需要确定每个数位的取值范围及进位规则,例如,对于十进制,我们使用0、1、2、3、4、5、6、7、8、9这10个符号来表示每个数位上的取值范围,并规定0+1=1,1+1=2,2+1=3,…,8+1=9,而对于某些运算,例如9+1,则规定其结果为0,并且需要进位(即逢十加一)。同时,每个数的位置也表明了其意义,例如,对于十进制数字2019.08,其中的2表示的是2个千,而最后一个8则表示的是8个百分之一。
一般地,任意一个十进制数
D=dndn-1…d1d0.d-1d-2…d-m(m、n为正整数)
其值可以表示为如下形式:
V(D)=dn×10n+dn-1×10n-1+…+d1×101+d0×100+d-1×10-1+d-2×10-2+…+d-m×10-m
其中的di(i=n,n-1,…,1,0,-1,-2,…,-m)可以是0、1、2、3、4、5、6、7、8、9这10个数字符号中的任何一个,10称为基数(base),它代表每个数位上可以使用的不同数字符号的个数。10i称为第i位上的权。在用十进制数进行运算时,每位计满10就要向高位进一。
类似地,二进制数的基数是2,只使用两个不同的数字符号0和1,运算时采用“满二进一”的原则,即规定0+0=0、0+1=1、1+0=1、1+1=0并且需要进位。例如,对于一个二进制数(1011.01)2,其对应的数值是1×23+0×22+1×21+1×20+0×2-1+1×2-2=11.25。
一般地,任意一个二进制数
B=bnbn-1…b1b0.b-1b-2…b-m(m、n为正整数)
其值可以表示为如下形式:
V(B)=bn×2n+bn-1×2n-1+…+b1×21+b0×20+b-1×2-1+b-2×2-2+…+b-m×2-m
其中的bi(i=n,n-1,…,1,0,-1,-2,…,-m)只能是0、1中的一个。
扩展到一般情况,在R进制数字系统中,需要有R个基本符号来表示各位上的数字,采用“满R进一”的运算规则,对于每一个数位i,该位上的权为Ri。R被称为该数字系统的基数。
任意一个R进制数
R′=rnrn-1…r1r0.r-1r-2…r-m(m、n为正整数)
其值可以表示为如下形式:
V(R′)=rn×Rn+rn-1×Rn-1+…+r1×R1+r0×R0+r-1×R-1+r-2×R-2+…+r-m×R-m
其中的ri(i=n,n-1,…,1,0,-1,-2,…,-m)只能是R个基本符号中的一个。
在计算机系统中的常用进位计数制有下列几种。
• 二进制R=2,基本符号为0和1。
• 八进制R=8,基本符号为0、1、2、3、4、5、6、7。
• 十进制R=10,基本符号为0、1、2、3、4、5、6、7、8、9。
• 十六进制R=16,基本符号为0、1、2、3、4、5、6、7、8、9、A或a、B或b、C或c、D或d、E或e、F或f。
表2-1列出了这4种进位计数制之间的对应关系。
表2-1 4种进位计数制之间的对应关系

从表2-1中可以看出,十六进制的前10个数字与十进制的前10个数字相同,十六进制的后6个基本符号A、B、C、D、E、F的值分别为十进制的10、11、12、13、14、15。
在书写时可以使用后缀字母标识该数的进位计数制。一般用B(Binary)表示二进制,用O(Octal)表示八进制,用D(Decimal)表示十进制(一般可以省略,即默认状态为十进制),用H(Hexadecimal)表示十六进制。
在编写代码时,其表示规则又有所不同。下面以C语言为例进行说明。
十进制数不需要任何说明,但要求数字部分只能是0~9,且不能以0开头。

八进制数由0~7八个数字组成,使用时必须以数字0开头。

十六进制由数字0~9、字母A~F或a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头。

二进制由数字0和1组成,使用时必须以0b或0B(不区分大小写)开头。


值得注意的是,标准C规范中对八进制、十进制与十六进制的表示方法进行了说明,而二进制的表示方法并不是标准C的规范,对某些编译器进行扩展才能够支持。例如:Visual C++6.0与Visual Studio 2010不支持,但Visual Studio 2015支持;GCC 3.4.5不支持,但GCC 4.8.2支持。