二进制与进制的转换

​ 在计算机中,使用二进制存储信息,为什么是二进制呢?

​ 早期的计算机有3进制,还有5进制的,都是电驱动,用简单的电子元件来构建。电信号的电压来表征数字,如果是五进制,那么不稳定的电压,就会导致传输的信息的错误。二进制只有开和关(通电、断电)来表示两种状态,状态比较稳定 。

​ 计算机中每一个0或1表示一个位,一个字节由8位组成,值域为 000000002 ~ 111111112 。如果看成十进制整数,它的值域就是 010 ~ 25510 ,但是这两种表示对于描述位模式都不太方便,二进制表示过于冗长,而十进制表示与位模式的转换很麻烦,所以我们可以用十六进制来表示位模式。十六进制使用数字 ‘0’ ~ ‘9’ 以及字母 ‘A’ ~ ‘F’ (字母也可以小写)来表示16个可能的值。用十六进制表示,一个字节的值域为 0016 ~ FF16

下表展示了16个十六进制数与十进制和二进制的对应关系。

十六进制数字 十进制值 二进制值
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111

通常,我们认为以0x 或 0X 开头的数是十六进制的数。(注意:是“零x”)例如,我们可以将数字 AE4616 写成 0xAE46。接下来看看十六进制和二进制之间的转换。

比如,将0xAE46 转换成二进制表示,可以将十六进制数字的每一位进行展开:

十六进制 A E 4 6
二进制 1010 1110 0100 0110

这样,就得到了二进制表示 1010 1110 0100 0110 。

反过来,如果给定一个二进制数,可以将它分解为每4位一组,但是要注意如果位的总数不是4的倍数,最左边一组可以少于4位,前面用0补足,然后将每个组转换为相应的十六进制数字。

十进制和十六进制之间的转换需要使用乘法和除法来处理一般情况。将一个十进制数字 x 转换成十六进制数,可以不断的用 x 除以 16,得到一个商 q 和一个余数 r ,也就是 x = 16 * q + r 。然后用十六进制数字表示的 r 作为最低位,继续用 q 除以 16,直到 q 为 0 。

例如,十进制数 314156 的转换:

​ 314156 = 16 * 19634 + 12 (C)

​ 19634 = 16 * 1227 + 2 (2)

​ 1227 = 16 * 76 + 11 (B)

​ 76 = 16 * 4 + 12 (C)

​ 4 = 16 * 0 + 4 (4)

可以看出转换后的十六进制数为 0x4CB2C 。

反过来,将十六进制数转换为十进制数,可以将十六进制数的每一位乘以对应的 16 的幂。例如 0x7AF, 计算7 * 162 + 10 * 161 + 15 * 160 = 1967 。

同理,十进制与其他进制数之间的相互转换都可以用上面的方法。

你可能感兴趣的:(计算机基础)