首先,你要记住并且不要问为什么:“在计算机中,所有的数据,最终都是使用二进制数表达的。”
比如,你的电脑是32位系统,还是64位系统。其实,说的是你的电脑的计算存储能力,能够计算存储2的32次方之多的数据,或2的64次方之多的数据。一看到32,64,可能有些人会说,电脑怎么才计算存储这么点数据呀?且慢,我先带你算算2的32次方或64次方是多少。
——————————————————————————————————————
1:2的0次方
2:2的1次方(第 1 个手指)
4:2的2次方(第 2 个手指)【2(次方)2得四】
8:2的3次方(第 3 个手指)【3(次方)八,这…】
16:2的4次方(第 4 个手指)【4(次方)4十六】
32:2的5次方(第 5 个手指)【5(次方)等于32中的3+2】
64:2的6次方(第 6 个手指)【6(次方)对应64】
128:2的7次方(第 7 个手指)【七(次方)和1音形都很相近】
256:2的8次方(第 8 个手指)【八(次方)和二,就10分完美】
512:2的9次方(第 9 个手指)【九(次方)五之尊】
1024:2的10次方(第 10 个手指)【10(次方)对应1024】
从2的0次方到10次方,哪怕做不到脱口而出,起码也要做到屈指可数。
——————————————————————————————————————
2048:2的11次方
4096:2的12次方
8192:2的13次方
16385:2的14次方
32768:2的15次方
65536:2的16次方
131072:2的17次方
262144:2的18次方
524288:2的19次方
1048576:2的20次方
——————————————————————————————————————
…………
…………
…………
太多了,算不下去了。有兴趣的自己算吧。看看你还敢不敢说2的32次方或64次方小。
好了,言归正传,好好来理解一下“二进制”的精髓。
先拿一个二进制的整数来说:
0111,在二进制中,是这样理解的:0X(2的3次方) + 1X(2的2次方) + 1X(2的1次方) + 1X(2的0次方) = 0X8 + 1X4 + 1X2 + 1X1 = 7。
————————————————————————————————————————
解读:从该某某进制的数的小数点左边第一位起往左算,分别对应乘以该进制的0次方->乘以该进制的1次方->乘以该进制的2次方->乘以该进制的3次方…
再拿一个二进制的小数来说:
0.0111,在二进制中,是这样理解的:0X(2的-1次方) + 1X(2的-2次方) + 1X(2的-3次方) + 1X(2的-4次方) = 0X(1/2) + 1X(1/4) + 1X(1/8) + 1X(1/16) = 你自己算吧。
————————————————————————————————————————
解读:从该某某进制的数的小数点右边第一位起往右算,分别对应乘以该进制的-1次方->乘以该进制的-2次方->乘以该进制的-3次方->乘以该进制的-4次方…
题外话:不要告诉我不懂“负次方”!负次方:一个数的正次方的倒数,即为其负次方。
所以,二进制的数,转换成十进制,很简单。
只需将该二进制的数,按照小数点左边和右边,写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
例:
二进制的:
0111.0111 = 0X(2的3次方) + 1X(2的2次方) + 1X(2的1次方) + 1X(2的0次方) + 0X(2的-1次方) + 1X(2的-2次方) + 1X(2的-3次方) + 1X(2的-4次方) = 0X8 + 1X4 + 1X2 + 1X1 + 0X(1/2) + 1X(1/4) + 1X(1/8) + 1X(1/16) = 你自己算吧。
那反过来,十进制的数,如何转换成二进制?
讲这个之前,先看个例子:
假设十进制整数A,转换成二进制数为dcba的形式,那么用"按权相加"法,得:
A = a X (2的0次方) + b X (2的1次方) + c X (2的2次方) + d X (2的3次方)
等式左右两边,同时除以2,得:
A/2 = a X (2的0次方)/2 + b X (2的1次方)/2 + c X (2的2次方)/2 + d X (2的3次方)/2
上面等式右边,因为只有 a 是乘以 2的0次方 这一项,所以被2除不开而被余下来;
所以第一次除以2,将得到余数,即其二进制的小数点左边第一位 a ;
上面等式右边,把 a 取出来,得到的商:b X (2的0次方) + c X (2的1次方) + d X (2的2次方) 第二次除以2,得:
b X (2的0次方)/2 + c X (2的1次方)/2 + d X (2的2次方)/2
上面式子中,因为只有 b 是乘以 2的0次方 这一项,所以被2除不开而被余下来;
所以第二次除以2,将得到余数,即其二进制的小数点左边第二位 b ;
……
以为类推,除以2取余数,得到的商再除以2再取余数,将不断得到其二进制的小数点左边第一二三四……位 abcd 。
再看个例子:
假设十进制小数B,转换成二进制数为0.efgh的形式,那么用"按权相加"法,得:
B = e X (2的-1次方) + f X (2的-2次方) + g X (2的-3次方) + h X (2的-4次方)
等式左右两边,同时乘以2,得:
BX2 = e X (2的-1次方) X2 + f X (2的-2次方) X2 + g X (2的-3次方) X2 + h X (2的-4次方) X2
上面等式右边,因为只有 e 是乘以 2的-1次方 这一项,所以乘以2而变成整数;
所以第一次乘以2,将得到整数部分,即其二进制的小数点右边第一位 e ;
上面等式右边,把 e 取出来,剩下的小数部分:f X (2的-1次方) + g X (2的-2次方) + h X (2的-3次方) 第二次乘以2,得:
f X (2的-1次方) X2 + g X (2的-2次方) X2 + h X (2的-3次方) X2
上面式子中,因为只有 f 是乘以 2的-1次方 这一项,所以乘以2而变成整数;
所以第二次乘以2,将得到整数部分,即其二进制的小数点右边第二位 f ;
……
以为类推,乘以2取整数部分,剩下的小数部分再乘以2再取整数部分,将不断得到其二进制的小数点右边第一二三四……位 efgh 。