标签:network
二进制只使用数字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” 博客,谢绝转载!
标签:network
原文地址:http://0487561.blog.51cto.com/7160047/1592732