首页 > 代码库 > 二进制、十进制和十六进制的转换

二进制、十进制和十六进制的转换

二进制只使用数字0 和1 ,其中每个数字对应于一位( 二进制位)。通常,我们将每4 位或8 位作为一组,分别称它们为半字节(nibble) 和字节。

我们感兴趣的是二进制值对应的十进制值一一十进制以10 为基数,我们从幼儿园起就开始使用

它了。二进制位按从右向左的顺序排列,每向左移动一位,位值就翻一倍。

表2-1 列出了半字节和字节中各位代表的十进制值。别忘了,半字节包含4 位, 字节包含8 位。

技术分享

这意味着如果某一位的取值为1 ,则计算半字节或字节对应的十进制值时,应将其位值与其他所

有取值为1 的位值相加。如果为0 ,则不考虑。

下面更详细地阐述这一点。如果半字节的每一位都为1 ,则将8、4 、2 和1 相加,结果为15一一

半字节的最大取值。假设半字节的取值是1010 ,即位值为8 和2 对应的位为1 ,则对应的十进制值为

10。如果半字节的取值为0110 ,则对应的十进制值为6 ,因为位值4 和2 对应的位为1 。

然而,字节的最大取值比15 要大得多,因为如果字节中每位都为1 ,则其取值如下(别忘了, 字

节包含8 位):

11111111

此时若要计算字节对应的十进制值,可将所有取值为1 的位的位值相加,如下所示:

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

这是字节的最大可能取值。

二进制数还可对应众多其他的十进制值,下面来看一些例子。假设二进制数取值如下:

10010110

哪些位的取值为1 呢?答案是位值为128 、16 、4 和2 的位,因此只需将这些位值相加: 128+ 16+4+

2= 150。再举个例子,假设二进制数取值如下:

01101100

哪些位的取值为1 呢?答案是位值为64 、32 、8 和4 的位,因此只需将这些位值相加: 64+32+8+4=

108。再者,如果二进制数取值如下:

11101000

哪些位的取值为1 呢?答案是位值为128 、64、32 和8 的位,因此只需将这些位值相加: 128+64+32+8=232 。

阅读第3 章和第4 章与IP 相关的内容前,你应牢记表2-2 的内容。

技术分享

十六进制地址与二进制和十进制完全不同,我们通过读取半字节将二进制转换为十六进制。通过

半字节,我们可轻松地将二进制转换成十六进制。首先需要明白的是,十六进制只能使用数字0-9 ,

而不能使用10 、11 、12 等(因为它们是二位数),因此使用A 、B 、C、D 、E 和F 分别表示10 、11 、

12 、13 、14 和15 。

十进制使用10 个数字,十六进制又使用了字母表的前6 个字母,即A-F。

表2-3 列出了每个十六进制数字对应的二进制值和十进制值。

技术分享


技术分享

前10个十六进制数字(0-9 )与相应的十进制值相同,你注意到了吗?因此,这些值转换起来非

常容易。

假设有十六进制数Ox6A (有时候,思科喜欢在字符前添加Ox , 让你知道它们是十六进制值。Ox

并没有其他特殊含义),它对应的二进制值和十进制值是多少呢?你只需记住,每个十六进制字符相

当于半字节,而两个十六进制字符相当于一字节。要计算该十六进制数对应的二进制值,可将这两个

字符分别转换为半字节,然后将它们合并为一个字节:6=0110 ,而A= 1010 ,因此整个字节为01101010 。

要从二进制转换为十六进制,只需将字节划分为半字节,下面具体解释这→点。

假设有二进制数01010101 。首先将其划分为半字节0101 和0101 ,这些半字节的值都是5 ,因为

取值为1 的位对应的位值分别是1 和4。因此,其十六进制表示为Ox55 。要将二进制数01010101 转换

为十进制数,方法为64 + 16 + 4 + 1 = 85 。

下面是另一个二进制数:

11001100

其中1100=12 , 1100= 12 ,因此它对应的十六进制数为cc。将其转换为十进制时,答案为128+64+

8 +4 =204

下面再介绍一个例子,假设有如下二进制数:

10110101

它对应的十六进制数为OxB5 ,因为1011 对应的十六进制值为B , 0101 对应的十六进制值为5 。将其

转换为十进制时,结果为128+32+ 16+4+ 1 = 181 。



本文出自 “Try to be brave” 博客,谢绝转载!

二进制、十进制和十六进制的转换