二进制
我们常用的计数方式是十进制,这可能来源于我们拥有10根手指。在计算机界,由于电子管只有开和关两种状态,用以表示十进制比较复杂。于是采用二进制进行计算。
二进制遵循逢二进一的原理,每一位只有 0 和 1 两个数字,这样的一位称为 binary digit (二进制位), 缩写为 bit(比特)。是计算机的最小单位。
由于二进制每一位包含的信息较少,所以二进制只能使用更多位数来表示其他进制的信息。
比如二进制的10表示十进制的2,二进制的100表示十进制的4.
二进制与十进制正整数的转换
由于二进制和十进制不存在倍数关系,所以转换时需要一定的计算。
二进制转十进制
任何进制都遵循以下规律:
x进制在y位上数值为z,z占权重为:
1 | z * x ^ (y - 1) |
而整个数字就是所有位的权重和。
比如十进制数345就是由以下公式计算而来:
1 | 3 * 10 ^ 2 + 4 * 10 ^ 1 + 5 * 10 ^ 0 |
同理,二进制数我们也可以使用按位计算并求和的方式转换为十进制。二进制有以下特点:
进制x = 2
z等于1或者0 (为0时可以忽略不计,为1时权重等于 2 ^ (y - 1))
所以二进制数1001011转换为10进制的计算如下:
1 | 2 ^ 6 + 2 ^ 3 + 2 ^ 1 + 2 ^ 0 |
最终得到: 75
十进制转二进制
十进制转二进制使用如下计算方式:
1 | 不断将数字除以2,若余数为0,则在高位添加0,若余数为1,则在高位添加1 |
这是由于,任何一个十进制的正整数都可以表示为多个底数为2,指数不同的幂的和:
1 | 2 ^ x + 2 ^ y + ... + 2 ^ z |
在不断除以2的过程中,会将低位计算并剔除。
除到第2 ^ y 时,此时公式为
1 | 2 ^ x / 2 ^ y + ... + 2 ^ y / 2 ^ y |
由于 2 ^ (x - y) 肯定为偶数, 而 2 ^ y / 2 ^ y 为1,此时,若存在 2 ^ y这个加数,则余数为1,不存在则余数为0。