在C和Java等高级语言编写的程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表示的。所以只要掌握了使用二进制数来表示信息的方法及其运算机制,就自然能够了解程序的运行机制。
一、用二进制数表示计算机信息的原因
计算机的内部是由IC构成的。IC有几种不同的形状,有的像一条黑色蜈蚣 ,其两侧有数个乃至数百个引脚;有的像插画用的针盘,引脚在IC内部并排排列着。IC的一个引脚只能表示两种状态,即直流电流0V和5V。也就是由于IC的这个特性决定了计算机的信息数据只能有二进制数来处理。对于同二进制数表示的信息,计算机不会区分他是数值、文字、还是图像的模式等,而是根据编写程序的各位对计算机发出的指示来进行信息的处理。
二、什么是二进制数
二进制是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进制数。
三、移位运算和乘除运算的关系
二进制所特有的运算,也是计算机所特有的运算。移位运算指的是将二位制数值的各数位进行左右移位的运算。移位有左移(向高位方向)和右移(向低位方向)两种。在一次运算中,可以进行多个数位的移位操作。左移运算符<<,右移运算符>>。<<运算符和>>运算符的左侧是被移位的值,右侧表示要移位的位数。移位运算也可以通过数位移动来代替乘法运算和除法运算。例如,将00100111左移两位的结果是10011100,左移两位后数值变成了原来的4倍。
四、便于计算机处理的“补数”
二进制中表示负数值时,一般会把最高位作为符号来使用,因此我们把这个最高位成为符号位。符号位是0时表示正数,符号位是1时表示负数。“1”的二进制数是00000001,“-1”的二进制数是10000001。
计算机在做减法运算时,实际上内部是在做加法运算。为此,在表示负数时就需要使用“二进制的补数”。补数就是用正数来表示负数。为了获得补数,我们需要将二进制数的各数位的数值全部取反,然后再将结果加1。例如,用8位二进制数表示-1时,只需求得1,也就是00000001的补数即可。具体就是将各数位的0取反成1,1取反成0,然后将取反的结果加1,最后就转化成了11111111.补数求解的变换方法就是“取反+1”。
五、逻辑右移和算术右移的区别
右移有移位后在最高位补0和补1两种情况。当二进制数的值表示图形模式而非数值时,移位后需要在最高位补0。类似于霓虹灯往右滚动的效果。这就称为逻辑右移。
将二进制数作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值。这就称为算术右移。
六、掌握逻辑运算的窍门
计算机能处理的运算,分为算术运算和逻辑运算。算术运算是指加减乘除四则运算。逻辑运算是指对二进制数各数字位的0和!分别进行处理的运算,包括逻辑非、逻辑与、逻辑或和逻辑异或四种。逻辑非指的是0变成1、1变成0的取反操作。逻辑与指的是“两个都是1”时,运算结果为1,其他情况下运算结果都是为0的运算。逻辑或指的是“至少有一方是1” 时,运算结果为1,其他情况下运算结果都是0的运算。逻辑异或指的是排斥相同数值的运算。