[英]How do I can solve this kind of python expression?
我有两个表达式,如下所示:
a,b,c=2,4,5
print(a|b*c)
output : 22
How it is returning me the 22
第二个表达式是:
print(a|b^c)
output : 3
谁能向我解释一下 python 是如何计算这个的? 我是 python 的新手,我不知道它是如何计算的。
表达#1
让我们考虑一下,
a|b*c
*
(乘法)的Precedence
大于|
(按位或)这就是为什么第一个b*c
将被计算,然后它的 output 将被计算a
脚步:
1- b*c
将返回 20。
2- 然后a
将与b*c
执行按位或运算。 请参见Bitwise OR operation
(当有任何一个时 OR 返回 1,否则为 0)
3- 将a
和b*c
的值转换为二进制并执行按位运算。 请参阅Convert decimal to binary
1 0 > a = 2
1 0 1 0 0 > b*c = 20
_________
1 0 1 1 0 > a|b*c = 22
表达#2
让我们考虑一下,
a|b^c
^
(按位异或)的Precedence
大于|
(按位或)这就是为什么第一个b^c
将被计算,然后它的 output 将被计算a
脚步:
1- 将在 b 和 c (b^c) 之间执行按位异或运算。 请参见Bitwise XOR operation
(当有奇数个时,异或返回 1,否则为 0)
1 0 0 > b = 4
1 0 1 > c = 5
______
0 0 1 > b^c = 1
2- 然后a
将与b^c
执行按位或运算。 请参见Bitwise OR operation
(当有任何一个时 OR 返回 1,否则为 0)
1 0 > a =2
0 1 > b^c = 1
___
1 1 > a|b^c = 3
这是按位和 integer 算术运算的混合。
这是如何运作的?
根据docs中定义的运算符的优先顺序,要计算的第一个表达式是 b*c,它返回 20。然后我们计算表达式 a|20。 这是对两个整数的按位运算,所以我们正在做的是对这两个数字的二进制表示的每一位进行逻辑或,即 (00010) | (10100) 这给了我们 (10110) 即 22
同样,在第二个例子中,我们首先对 b 和 c 进行 XOR,等于 1(计算为二进制 100 XOR 101 = 001)。 然后将结果与 a 进行按位或运算,返回值 3
算术运算符 * , /, +, -的优先级大于位运算符&, |, ^并且如果找到相同的优先级,则从左到右计算两种类型的运算符。
而且,
查看这篇文章了解更多信息
来到解决方案:
您需要将这些数字分解为它们的二进制表示,以了解幕后发生的事情。
情况1,
(2) 的二进制 - 00010
b*c 的二进制 (20) - 10100
因此,如果您执行按位或 (|),您将得到上述两个的二进制和,即 10110 = 22
案例2,
(2) 的二进制 - 00010
b (4) 的二进制 - 00100
c (5) - 00101 的二进制文件
同样,如果您执行按位异或 (^),您将得到 b 和 c 的二进制异或,即 00001= 1
最后,如果您执行按位 OR (|),您将得到 a 与 b^c 的二进制和,即 00011 = 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.