(1)整数的转换
把十进制整数连续除以2,记录其余数,就得到二进制数,这个方法简称为除2取余法。例如:

按由高位到低位写下来就得到:
(59)10=(111011)2
(2)小数的转换
把十进制小数连续乘以2,取出其积的整数,就得到二进制数,这个方法简称为乘2取整法。
例如:

于是得到:
(0.5625)10=(0.1001)2
小数换算中,不是都能得到小数部分乘积为零的结果,这时,只能按精度要求取若干位,作为它的近似值。
例如:

(0.3)10=(0.01001…)2≈(0.01001)2
(3)既有整数部分又有小数部分的数,转换时要把整数部分和小数部分分别计算,再把两部分加起来,就是一个二进制数。例如:
(59.3)10=(59)10+(0.3)10
上例已求出(59)10=(111011)2、(0.3)10≈(0.01001)2
所以(59.3)10≈(10111011.01001)2
计算机只能识别二进制数,当数值愈大时,二进制数表示的位数就愈多,例如
(11011011011.001)2=(1755.125)10
这个二进制数有11位,小数有3位。(可以表示到上千的十进制数),在读数和书写时,都极不方便。因此,在编写程序时又常常使用八进制数和十六进制数。
和十进制、二进制的规则相仿,八进制数采用8个符号(即0、1、2、3、4、5、6、7),逢8进位。十六进制数采用16个符号(即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F),逢16进位。例如:
(16)8=1×81+6×80=(14)10
(25)10=2×161+5×160=(37)10
以下介绍各种数制之间的转换方法:
(1)八进制、十六进制转换为十进制
方法与上面二进制和十进制的转换方法相类似。如上例所示。
(2)八进制数转换成二进制数
把每位八进制数用所对应的3位二进制数表示,就转换为它的二制数。
例: (3 2 6)8
↓ ↓ ↓
(001) (010) (110)
即(326)8=(11010110)2
(3)十六进制数转换成二进制数
把每位十六进制数用所对应的4位二进制数表示,就转换为的二进制。
例如: (
↓ ↓ ↓
(0111) (1010) (0011)
即(
(4)二进制整数转换为八进制数
从最低位开始,向左每3位分为一组,不够3位的用0补足3位,将每组的二进制数按对应的八进制数写出,就转换成了八进制数;二进制小数,则从小数点开始向右每3位划为一组,不够三位,用0补充3位,写出其对应的八进制数,例如:
(11101001110.1101)2
分组为: (011)(101)(001)(110).(110)(100)
对应的八进制数为: ↓ ↓ ↓ ↓ . ↓ ↓
3 5 1 6 . 6 4
即(11101001110.1101)2=(3516.64)8
(5)二进制数转换成十六进制数
从最低位开始,向左每4位分为一组,不够4位的用0补足4位,将每组的二进制数按对应的十六进制数写出,就转换成了十六进制数,二进制小数,则从小数点开始向右每4位划为一组,不够4位用0补足4位,写出其对应的十六进制数。例如:
(1011011.01101)2
分组为: (0101) (1011) (0110) (1000)
对应的十六进制数 ↓ ↓ ↓ ↓
5 B 6 8
即(1011011.01101)2=(5B.68)16
我们用0、1来表示二进制,是数的一种编码表示。编码的方法在我们生活中也是常见的,如通信中的邮政编码、电话号码、电报中的莫尔斯码、身份证代码、学号代码、汉字的国际码、区位码等等。
在计算机中只给数的表示进行了编码还不够,要处理数的符号是正还是负怎样办?处理英文字符、乘除,以至汉字又怎么办?所以都得用0、1来给它们编码。现在最通用的一种给字符的编码是ASCII代码(即American Standard Code for Information Interchange的缩写),例如英文字母A,用8位二进制数01000001表示,换成十六进制表示为(41)16,各种字符的ASCI代码,列在附录一中。
计算机要做各种运算和处理,这些动作也需要编码,例如要它做5+6的加法,就要有取数、进行加、送数等操作,对这些操作的说明也用0、1的符号串编码,这就形成了计算机的指令码。
总之,计算机只能识别0、1两个符号。和计算机沟通信息,就得要以这两个最简单的符号为基础,对各种信息形式进行变换,把计算机不能直接识别的信息变换为计算机能识别 的信息。
人们要计算机处理信息,就要给计算机规定一些最基本的操作,并用0、1来表示这些操作,这就构成为一条一条的指令。在设计的时候,就给它规定了一套指令,称之为指令系统(即Instruction Set)。不同型号的计算机,指令系统也不相同。而一条指令由操作码(Opcode)和操作数(Oprand)两部分构成,例如在Z80中有这样一条指令:
11000110 00000110
操作码 操作数
操作码11000110表示做加法的操作,操作数是00000110。这条指令的功能就是把操作数00000110与计算机的累加器中的数相加,相加的和仍放在累加器中,例如先累加器中放一个数00000101,执行这条指令的过程如图1-1所示。这条指令用十六进制表示为:C6 06。

图1-1 执行过程
计算机算题要由要事先告诉它算题的方法和步骤,而且要把动作分解得非常之细,每一步都是计算机指令能执行的,它才能按照人们设计的步骤,一步一步地去执行。如果人们设计的步骤是正确的,计算机就能算得正确的结果,如果设计的步骤不正确,计算机就不能算出正确的结果,甚至没有结果。
以极简单的5+6的加法为例。它的解题步骤如下:
(1)把数字5和6送到机的内存中存放起来;存贮单元都要有一个编号,称为地址。例如43号地址存入数5,写为(43)←5,同样,(44)←6;
(2)把数5取出来,送到累加器;
(3)把数6取出来,与累加器中的数相加,结果放在累加器中;
(4)把累加器结果送回到内存的45号地址存放起来,即(45)←11;
(5)把结果输出到打印机或显示器上;
(6)结束。
这些解题步骤的集合,我们就称之为程序,第1步是数据的输入,第5步是数据的输出。2~4是计算机内的处理,用某种机器指令写出2~4这一过程,有如下的形式:
存贮地址 机器指令
┆
00010000 00111011
00010001 00000000
00010010 00001011
00010011 00100001
00010100 00000000
00010101 00001100
00010110 10000110
00010111 00110010
00011000 00000000
00011001 00101101
┇
00101011 00000101
00101100 00000110
00101101 00001011
这些由机器指令构成的有序集合,就称为机器语言程序。计算机的工作就是按规定顺序地执行程序。人们使用计算机就要为它编制程序,我们称为程序设计。用机器语言编写程序很不直观,初学者看到这个程序就不知其所以然了。不必着急,看不懂没关系,这只是让你对机器语言有点感性认识。对于计算机来说,只有这样的机器语言,才能执行。
有了指令和程序的概念,就可以进一步了解计算机的工作原理,计算机是基于存贮程序的方法工作的。
首先,把程序和数据通过输入设备送往内存。一般的内存都是划分为很多存贮单元,每个存贮单元包括字节数随计算机的机型不同而不同,一个存贮单元通常称为字(Word),一个字的位(Bit)的多少,称为字长(Word Length),例如,中型机M340,字长为32位(即4个Bytes),微机字长有8位、16位、32位等。
每个存储单元都有地址编号,这样按一定顺序把程序和数据存起来,而且还把内存分为若干区域,比如有专门存放程序的程序区和专门存放数据的数据区。
其次,执行程序,必须从第一条指令开始,以后一条一条的执行。一般的情况下按存放地址号的顺序,由小到大依次执行,当遇有条件转移的指令时,才改变执行的顺序。每执行一条指令,都要经过三个步骤。第1步,把指令从内存中送往译码器,称为取指;第2步,译码器把指令分解成操作码和操作数,产生相应的各种控制信号送往各电路部件;第3步,执行相应的操作。这一过程是由电子线路来控制的,从而实现自动连续的工作。
这一原理是计算机结构设计的基础,它是美籍匈牙利数学家冯·诺依曼(Von Neumann)1946年提出并论证的,因此常把这一类型的计算机称为冯·诺依曼计算机,迄今为止,各种计算机仍属这一类型。