本周主要阅读了用二进制来理解数据。二进制这个东西啊,其实也很简单。那么什么是二进制呢?二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。计算机中的二进制则是一个非常微小的开关,用1来表示“开”,0来表示“关”。首先,我们有这样一个转换,将00100111这个二进制转换成十进制。我们需要将二进制数的各位数字乘以其对应的的位权,并将结果相加就可以了。那问题就来了,什么是位权呢?在十进制中,对于十进制69,我们知道其各位数字6和9并不仅仅仅是表示他们本身的数值。其中6表示610=60,9表示91=9.在这里,各位数字所乘的10和1就是位权。二进制也是一样的道理。从最低位开始,第一位是2的0次幂(=1),第2位是2的1次幂(=2),第三位是2的2次幂(=4)···,第8位是2的7次幂(=128)。这样来讲是不是很简单呢?其实,一个数所表示的数值,原本就是其各位上的数字乘以位权再相加的结果。二进制01000101相当于十进制的69,我们可以把他写成(0128)+(164)+(032)+(016)+(08)+(14)+(02)+(11)=69。其实道理就是这么简单。
书中讲到的位移运算与乘除运算的关系,这个关系呢,我们在Java中也讲到过,位移运算是一种对二进制的各位数字进行平移的运算。将各位数字向左(高位)移位称为左移,向右(低位)移位称为右移。一次运算可以对数字平移多位。具体的操作我们可以在题中体现出来。通过数位的移动,移位运算也可以用来代替乘法运算和除法运算。;例如,00100111左移2位的结果是10011100,这意味着左移后的结果是原数的4倍。从十进制的角度来看,数值从39(00100111)变成了156(10011100),我们可以发现数值正好是原来的4倍(39*4=156)。逻辑运算其实也很简单,就是与或非的关系,and,or,not的问题,就有两种结果true或false,具体怎么计算就不意义讲解了,根据逻辑运算的规则我们可以更好的去计算。好了,本周的感悟先写到这里吧,下周见!