我正在查看一段代码并遇到了这些问题:
1 & 0x44
1 & 0x11
1 & 0x85
1 & 0x22
1 & 0x20
我在Python中运行它并看到数字在变化,但我无法理解它在做什么。有人可以向我解释它在做什么吗?
由于
答案 0 :(得分:3)
这里的&
是一个按位运算符,这意味着查看二进制格式所涉及的数字以了解正在执行的内容更有意义。
因此对于65十进制,将其转换为二进制以给出'1000001'。
其他数字为十六进制,转换如下:
0x10 -> 10000
0x08 -> 01000
0x04 -> 00100
0x02 -> 00010
0x01 -> 00001
如您所见,65 & 0x01
的结果为1
,实现如下:
1000001 65 in binary
& 0000001 0x10 in binary
---------
0000001 Giving 1
---------
AND的逻辑:
AND
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1
代码正在尝试确定是否已设置了一个位。
关于bitwise operations的维基百科文章应该可以帮助您理解这个过程。
答案 1 :(得分:2)
&
运算符执行按位AND运算。简而言之,按位并取两个二进制数,并输出一个二进制数,其中每个位设置为1,如果其他两个数中的相同位置也设置为1。
例如:
111 & 110 = 110
101 & 110 = 100
前缀为0x
的数字是十六进制表示。
所以在你的情况下
65 = 1000001
0x10 = 16 = 0010000
0x8 = 8 = 0001000
0x4 = 4 = 0000100
0x2 = 2 = 0000010
0x1 = 1 = 0000001
所以按位和输出是
65 & 0x10 = 0
65 & 0x8 = 0
65 & 0x4 = 0
65 & 0x2 = 0
65 & 0x1 = 1
答案 2 :(得分:1)
&
是否为“按位和”,如果y的x AND的相应位为1,则输出的每个位为1,否则为0.例如
65 & 0x1
给出
1
因为它在
上执行按位操作1000001 & 0000001