计算机的中二进制

在C和Java等高级语言(相对于机器语言的一种指令集)编写的程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。也就是说,只要掌握了使用二进制数来表示信息的方法及其运算机制,也就自然能够了解程序的运行机制了。那么,为什么计算机处理的信息要用二进制数来表示呢?接下来我们就从其原因开始说起。

计算机内部是由IC(集成电路,如下图)这种电子部件构成的。IC有几种不同的形状,有的像一条黑色蜈蚣,在其两侧有数个乃至数百个引脚;有的则像插花用的针盘,引脚在IC内部并排排列着。IC的所有引脚,只有直流电压0V或5V两个状态,0V代表0,5V代表1。

也就是说,IC的一个引脚,只能表示两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制数来处理。由于1位(一个引脚)只能表示两个状态,所以二进制的计数方式就变成了0、1、10、11、100…这种形式。虽然二进制数并不是专门为IC而设计的,但是和IC的特性非常吻合。

计算机处理信息的最小单位——位,就相当于二进制中的一位。位的英文bit是二进制数位(binary digit)的缩写。二进制数的位数一般有8位、16位、32位……也就是8的倍数,这是因为计算机所处理的信息的基本单位是8位二进制数(8位0和1)。8位二进制数被称为一个字节(bit的谐音类似“咬下一口”)。字节是最基本的信息计量单位。位是最小单位,字节是基本单位。

 

 

认识计算机系列3

用字节处理数据时,如果数字小于存储数据的字节数(8位或者16位等),那么高位上就用0填补。例如,100111这个6位二进制数,用8位(=1字节)表示时为00100111,用16位(=2字节)表示时为0000000000100111。英特尔等64位微处理器,具有64个引脚以用于信息的输入和输出。也就是说,英特尔一次可以处理64位(64位=8字节)的二进制数信息。

程序中,即使是用十进制数和文字等记述信息,在编译后也会转换成二进制数的值,所以,程序运行时计算机内部处理的也是用二进制数表示的信息(如下图)。

认识计算机系列3

 

对于用二进制数表示的信息,计算机不会区分它是数值、文字,还是某种图片的模式等,而是根据编写程序的各位对计算机发出的指示来进行信息运)。例如00100111这样的二进制数,既可以视为纯粹的数值作加法运算,也可以视为“‘”(单引号,single quotation)文字而显示在显示器上,或者视为■■□■■□□□这一图形模式印刷出来。具体进行何种处理,取决于如何编写程序。

什么是二进制数

为了更清晰地说明二进制数的机制,首先让我们把00100111这个二进制数值转换成十进制数值来看一下。**二进制数的值转换成十进制数的值,只需将二进制数的各数位的值和位权相乘,然后将相乘的结果相加即可。如下图所示:

认识计算机系列3

 

假使有人问你:“为什么使用这样的 2020/01/08 07:27 转换方法呢?”如果你回答:“不知道原因,只是把方法背下来就行了“

这样是不行的,接下来就详细讲一下二进制的机制,请大家仔细阅读。

让我们从位权的含义说起。例如,十进制数39的各个数位的数值,并不只是简单的3和9,这点大家应该都知道。3表示的是3×10=30,9表示的是9×1=9。这里和各个数位的数值相乘的10和1,就是位权。

数字的位数不同,位权也不同。第1位(最右边数起)是10的0次幂(所有的0次幂都是1),第2位是10的1次幂(=10),第3位是10的2次幂(=100),依此类推.。

位权的思考方式也同样适用于二进制数。即第1位是2的0次幂(=1),第2位是2的1次幂(=2),第3位是2的2次幂(=4), ……,第8位是2的7次幂(=128)。“〇〇的××次幂”表示位权,

其中,十进制数的情况下〇〇部分为10,二进制数的情况下则为2。这个称为 基数(进制数中的最大值10) 。十进制数是以10为基数的计数方法,二进制数则是以2为基数的计数方法。“〇〇的××次幂”中的××,在任何进制数中都是“数的位数-1”。即第1位是1- 1=0次幂,第2位是2- 1=1次幂,第3位是3- 1=2次幂。

接下来,还是先以十进制为例来解释一下各数位的数值和位权相乘后“相加”这个处理的原因。其实我们平常所说的十进制数值,也是根据数值的各数位的数值和位权相乘后再相加的结果。例如39这个十进制数,表示的就是30+9,是根据3 *(10的1次幂)+ 1 *(10的0次幂)运算的来。

这种思考方式在二进制数中也是通用的。二进制数00100111用十进制数表示的话是39,因为(如上图所示)(0×128)+(0×64)+(1×32)+(0×16)+(0×8)+(1×4)+(1×2)+(1×1)=39。

计算机中的移位运算、乘除运算、逻辑右移(补数)和算数右移先不讲,感兴趣的可以自己了解一下。

声明:本文是根据程序是如何跑起来书籍的总结和提炼,如有侵权联系本人删除。

相关文章: