十进制零碎
十进制零碎即The Decimal System
在日常生活中,咱们每天都在应用逢十进一的数位(0、1、2、3、4、5、6、7、8、9)来示意数字,这种数制叫做十进制。
考查数字83的意义,能够示意成:
83 = (8 × 10) + 3
即八个10再加上一个3;
考查数字4728的意义,能够示意成:
4728 = (4 × 1000) + (7 × 100) + (2 × 10) + 8
即四个1000加上七个100再加上两个10再加上一个8。
从上得悉,咱们能够说,十进制的基数(base/radix)为10。也即,十进制数是由每个数位的数字乘以10的n次幂,n与数位的地位相干。例如:
83 = (8 × 101) + (3 × 100)
83是由两个数位形成,最右边的数位为最高(无效)数位,这里是8;最左边的数位是最低(无效)数位,这里是3。最低数位的地位所对应的10的幂为0,从右往左顺次加一。即,数位3为最低数位,故其10的幂为0,示意为3×100;往左挪动一位,数位为8,其10的幂为1,示意为8×101,将所有数位相加失去的和即该十进制数,也即,8×101+ 3×100= 83
应用同样的办法拆解数字4728,示意如下:
4728 = (4 × 103) + (7 × 102) + (2 × 101) + (8 × 02)
咱们应用同样的办法示意小数局部,只不过小数局部数位的10的幂为正数。其最大的数位的10的幂为-1,从左向右其数位的10的幂顺次减1。例如:
0.256 = (2 × 10-1) + (5 × 10-2) + (6 × 10-3)
在一个既有整数局部又有小数局部的十进制数中,其数位的10的幂也既有负数又有正数:
442.256 = (4 × 102) + (4 × 101) + (2 × 100) + (2 × 10-1) + (5 × 10-2) + (6 × 10-3)
应用表格示意上述数字的数位地位和其10的幂的关系:
4 | 7 | 2 | 2 | 5 | 6 |
---|---|---|---|---|---|
百位 | 十位 | 个位 | 非常位 | 百分位 | 千分位 |
102 | 101 | 100 | 10-1 | 10-2 | 10-3 |
position 2 | position 1 | position 0 | position -1 | position -2 | position -3 |
个别的,十进制数应用X来示意:
$$X = \{...d_2d_1d_0d_{-1}d_{-2}d_{-3}...\}$$
X的值为:
$$X=\sum_{i}(d_i×10^i)$$
按位计数零碎
按位计数零碎即Positional Number Systems
十进制零碎是按位计数零碎的一种。
在一个按位计数零碎中,每个数字(Number)的数位(Digit)的地位应用i示意,数位的权用ri示意。其中,r为数字的基数(base/radix)。
个别的,在该零碎中,一个数字可示意为:
$$(...a_3a_2a_1a_0a_{-1}a_{-2}a_{-3}...)_r$$
其中,每一个数位ai都是一个整数,且0≤ai≤r
该数字的值为:
$$... + a_3r^3 + a_2r^2 + a_1r^1 + a_0r^0 + a_{-1}r^{-1} + a_{-2}r^{-2} + a_{-3}r^{-3} + ... = \sum_i(a_i × r^i)$$
二进制零碎
二进制零碎即The Binary System
在十进制零碎中,每个数位有十个数能够示意,即0~9。在二进制零碎中,每个数位只有0或者1这两个数来示意。
为了防止在表白过程中引起的数制概念凌乱,咱们给每个数字加上数制下标。例如,十进制数83和4728,咱们应用8310和472810示意。
二进制数中的1和0在十进制中的意义雷同:
02 = 010
12 = 110
如果要应用二进制数字示意十进制数字中更大的数字(>2),显著的,在二进制中则须要进位了:
$$10_2 = (1 × 2^1) + (0 × 2^0) = 2_{10} \\11_2 = (1 × 2^1) + (1 × 2^0) = 3_{10} \\100_2 = (1 × 2^2) + (0 × 2^1) + (0 × 2^0) = 4_{10}$$
小数局部仍然应用10的负次幂示意,这里不再举例。
个别的,应用二进制示意数字:
$$Y = \{...b_2b_1b_0b_{-1}b_{-2}b_{-3}...\}$$
则Y的值为:
$$Y = \sum_i(b_i × 2^i)$$
二进制和十进制的转换
将二进制数转换为十进制数非常容易,上述的笔记中曾经有很多例子。
而要将十进制数字转换为二进制数字,整数局部和小数局部则须要离开解决。
整数局部
如上述笔记所叙,在二进制中,整数局部可示意为:
$$b_{m-1}b_{m-2}...b_2b_1b_0\quad(b_i=0或1)$$
该数字的值为:
$$(b_{m-1} × 2^{m-1}) + (b_{m-2} × 2^{m-2}) + ... + (b_1 × 2^1) + b_0$$
假如咱们须要将十进制的整数N转换为二进制,能够将N除以2,将失去一个商N1和余数R0,记为:
$$N = 2 × N_1 + R_0\quad(R_0=0或1)$$
接着,咱们将商N1持续除以2。令其新的商记为N2,新的余数记为R1,则:
$$N_1 = 2 × N_2 + R_1\quad(R_1=0或1)$$
那么有:
$$N = 2(2N_2 + R_1) + R_0 = (N_2 × 2^2) + (R_1 × 2^1) + R_0$$
咱们能够将失去的商持续往下除以2,因为N > N1 > N2...,最终会失去商:Nm-1 = 1(010和110除外)以及余数Rm-2 = 0或1,那么咱们能够失去:
$$N = (1 × 2^{m-1}) + (R_{m-2} × 2^{m-2}) + ... + (R_2 × 2^2) + (R_1 × 2^1) + R_0$$
即N的二进制模式。
因而,将十进制数的整数局部转换为二进制数,只需将数字一直除以2即可,将失去的余数(非0即1)逆序排列,就失去了二进制的整数局部。
例1:将1110转换为二进制。
解:
例2:将2110转换为二进制。
解:
小数局部
如上述笔记所叙,在二进制中,整数局部可示意为:
$$b_{-1}b_{-2}b_{-3}...\quad(b_i=0或1)$$
该数字的值为:
$$(b_{-1} × 2^{-1}) + (b_{-2} × 2^{-2}) + (b_{-3} × 2^{-3})...$$
也能够记为:
$$2_{-1} × (b_{-1} × 2^{-1} × (b_{-2} × 2^{-1} × (b_{-3} + ...)...))$$
上一个表达式正好提供了一个转换的思路。假如咱们要将数字F(0<F<1)由十进制转换为二进制。由上可知,数字F能够示意为:
$$F = 2^{-1} × (b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...))$$
等式两边同乘以2得:
$$2F = b_{-1} + 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...)$$
因为0<F<1,显然的,2F的整数局部b-1∈{0, 1}。咱们将残余的小数局部记为F1,且0<F1<1,可得:
$$F_1 = 2^{-1} × (b_{-2} + 2^{-1} × (b_{-3} + ...)...)$$
为了求b-1,咱们可反复上述步骤。以此类推,小数局部的转换算法行将小数一直乘以2即可。算法中每一步的被乘数都是上一步的积的小数局部,且积的整数局部肯定是0或1,其形成之正序序列即二进制的小数局部。然而,这个算法是不准确的,因为该算法的准确进行条件是直到积的小数局部等于0为止,而有时该算法可能会始终循环上来。因而,咱们须要另一个进行条件:将算法运行到咱们所须要的肯定精度即可。
例1:将0.8110转换为二进制。
解:
例2:将0.2510转换为二进制。
解: