按位运算符相对简单。 实质上,当我们使用按位运算符时,我们用二进制编写,1和0,我们使用按位运算符来表示二进制的整数。
今天,我们将学习如何阅读按位运算符。
我们将首先回顾一些关键术语,然后我们将介绍基本概念八进制和位值,基本的两位数字系统,最后我们将读取一些二进制文件。 所以,让我们开始吧!
基本术语
如果我们要阅读二进制文件,我们需要知道一些基本术语。 下面我们来定义一些我们经常使用的关键术语:
- 八位组成一字节(Octet):八位(bit)组成的单元(1 octet)
- 位(Bit):八分之一个字节,以1或0的形式存在
- 基本二进制系统:这个系统用来确定一个位上的值
如果您对此术语有任何疑问,请将它们留在评论部分或直接给我发消息。 您必须了解这些条款才能继续。
现在我们知道一些基本术语,让我们再解释Octet。
解释Octet
现在,我们已经讨论过1个octet由8个bit组成的定义, 而且,8个bit构成1个byte。
Octet中的每个bit都保持着不同的值。
这些地方的数字编号为0到7(就像下图的索引一样)。 事情是,他们的编号是相反的。
当我们读/写二进制的时候,我们从右向左阅读。 我们来看一个octet的表示:
图18.1
在这里,我们可以看到我们的8个bit与他们各自的数字对应。
现在我们知道一个octet的布局,我们可以讨论基本的二进制系统了。
基本二进制系统
现在我们已经介绍了octet的布局以及它的bit上的值,我们可以讨论基本的二进制系统。这是用来根据它在octet中bit的位置来得出一个十进制数的系统。
比特可以是1或0。 1表示该位处于使能状态,而另一个0表示该位处于关闭状态。如果有1 bit为0,我们就不计算它的价值。我们只计算使能的位上的值。
顾名思义,二进制系统的基数为两个。为了通过一个bit的数来找到对应的十进制数,我们把这个bit的位数乘以2。
接下来让我们来看看二进制系统是怎么工作的。
我们来看看前面的位编号图,但是这次我们将用十进制值标明各个位:
图18.2
我们可以看到,通过取2的n次方来表示每一位的值,我们可以计算出相应位的十进制值!
计算整个Octer
我们知道如何计算各个位,现在我们可以计算出整个octet的值!
我们将再次看看我们的图,但是这次我们要用1和0来替代一些bit位上的数。然后,我们将计算这些位置的十进制值,并使用这些值来计算整个octet的值!
我们先看看这些1和0的分布:
图18.3
好的,所以我们在这里看到我们有1和0的混合排列。我们的目标是计算整个octet的总值,所以我们必须排除任何零位(off)的位置。
让我们继续,用红色X标记这些位置,将它们从我们的计算中排除:
图18.4
好吧,现在我们知道需要计算哪些位了,让我们来做。
请记住,我们需要采取2的n次方的方式来计算,n代表位的索引值。您可以参考下面的图表。
让我们继续计算我们的位值,我们将把十进制值放在它们下面:
图18.4
在那里,现在我们已经计算出了我们各bit位上对应的值,我们只需要将它们总和起来就可以找到octet的值了:
图18.5
我们已经成功计算出我们的Octet的值了!二进制数字01100101等于十进制的101。
总结
今天我们介绍Octet/Bit,二进制系统,以及如何将二进制转换为十进制(整数)的方法。我们这一轮没有做任何代码介绍,因为我们要继续深入之前了解这些基本知识,我们不会盲目介绍Python知识的!
下一次我们将介绍如何在Python中实际使用按位运算符做计算。
感谢您的阅读!
练习
请计算如下二进制代表的十进制数
1. 1110 8+4+2 = 14
2. 1010 8+0+2+0 = 10
3. 0010 0+0+2+0 = 2
4. 1000 0010
5. 1111 1111
6. 0010 1100
7. 1010 0010 1100 1001
8. 0101 0000 1010 0001
9. 1110 1111 1111 0111