十进制转二进制,只要记住一个等比数列就好
对于没接触过二进制的同学来说,进制转换问题确实有一点非脑筋。不过没关系,我们先从熟悉的十进制来学习。
在十进制中,我们讲究个位,十位,百位,千位等等,这里的个十白千实际上就是权重的意思。每个位置的权重是不变的,变的只是这个位置上填充的数字。
口口口
这里有一个三位数,最假设给三个方框填充的数字从左到右是279,那么你自然就读出这个数字,是二百七十九,你有没有发现,你填充的是2,最终却有一个二百,你填充的是七,最终却有一个七十,你填充的是九,最终有一个九。
为什么?
因为每个方框都隐含着一个权重,你可以在这个方框里面填充0~9中的任意一个数字,那么最终得到的数字,就是每个方框里面的数字乘以每个方框对应的权重,再把这些结果加起来。
最左边的方框的权重是100,即10的二次方,中间的方框的权重是10,即10的一次方,最右边的方框的权重是10的零次方,即1,所以最终的结果就是2*100+7*10+9*1=279。
我画了一张十进制的权重表

可以看到权重从左往右是一次降低的,而且是一个等比数列,公比是10。
你只要在方框里面填充数字,你就能得到你想要的任何数字。
再来看二进制。
有了十进制的基础,那么二进制就很好理解了。因为是同样的道理。
十进制里面每个方框可用的数字是0到9,每个方框的权重是10的次方。那么二进制里面每个方框可用的数字是0和1,每个方框的权重是2的次方。
我画了一张二进制的权重表

可以看到每个方框的权重都是2的次方,而且这些权重从左到右是一个以2为公比的等比数列。
而且,每个方框的权重都转换成了对应的十进制数字,2的四次方正好是16,2的三次方正好是8,2的二次方正好是4。这就是十进制转二进制的关键。
有了这张权重表我们就可以把任何十进制数转换为二进制。
举个例子。
现在把176这个十进制数字转化为二进制?
先把二进制权重表列出来
256 128 64 32 16 8 4 2 1 0.5 0.25
从左往右看,第一个权重是256,这个位置只能填充0,如果是1的话,那么256*1,再加上其它的值就超过176这个数字了。
第二个权重是128,128比176要小,所以这个位置要填充1,然后还剩下176-128=48
第三个权重是64,64比48要大,所以这个位置是0。
第四个权重是32,32比48要小,所以这个位置是1,然后还剩下48-32=16
第五个权重是16,正好我们就需要16,剩下16-16=0
剩下的整数位置的权重全部填充为0即可。
那么最后的结果就是0101 0000 0

再来看一个小数,0.5625,把它转化为二进制是多少呢?
列出权重
8 4 2 1 0.5 0.25 0.125 0.0625
8这个位置的肯定填充0,因为8大鱼0.5625
4 2 1 这几个位置是一样道理,都填充0
看0.5这个位置,0.5比0.5625要小,那么0.5这个位置要填充1,剩下0.5625-0.5=0.0625
看0.25这个位置,0.25比0.0625要大,那么这个位置要填充0。
看0.125这个位置,0.125比0.0625要大,所以这个位置要填充0,剩下0.0625
看0.0625这个位置,这正好就是我们要的数字,所以这个位置要填充1.
所以最终的结果就是0000 1001