运算符“|=”与“+=”
Operator "|=" versus "+="
两者有什么区别吗?
如果不是,那么为什么在我们可以使用更知名的 +=
时实施 |=
?我觉得可能只是为了方便,陪&=
,我觉得没有替代品。
当然有区别:
a = 1
a |= 1
print a
对比
a = 1
a += 1
print a
一个是加法,一个是按位或运算。对于其他类型,它们也可能以不同的方式重载。
为此你需要了解位运算:
例如:
a = 2
a |= 2
将导致 a = 2
这是因为 |
(或)运算符是这样工作的:
2
在二进制中表示为10
,10|10
可以这样写:
10
10
___
10
您查看每一列,如果其中一行中有一个 1
,那么在结果行中您也会有一个 1
。
当您计算 2|1
时,您可以获得与 2 + 1
类似的结果,因为 1
在二进制中是 01
并且操作转换为:
10
01
___
11
而二进制的 11
是十进制的 3
。
两者有什么区别吗?
如果不是,那么为什么在我们可以使用更知名的 +=
时实施 |=
?我觉得可能只是为了方便,陪&=
,我觉得没有替代品。
当然有区别:
a = 1
a |= 1
print a
对比
a = 1
a += 1
print a
一个是加法,一个是按位或运算。对于其他类型,它们也可能以不同的方式重载。
为此你需要了解位运算: 例如:
a = 2
a |= 2
将导致 a = 2
这是因为 |
(或)运算符是这样工作的:
2
在二进制中表示为10
,10|10
可以这样写:
10
10
___10
您查看每一列,如果其中一行中有一个 1
,那么在结果行中您也会有一个 1
。
当您计算 2|1
时,您可以获得与 2 + 1
类似的结果,因为 1
在二进制中是 01
并且操作转换为:
10
01
___11
而二进制的 11
是十进制的 3
。