逻辑运算符随想
#TIL C++(以及 C)中的逻辑运算符也可写成英文:(参考)
&& and & bitand &= and_eq
|| or | bitor |= or_eq
^ xor ^= xor_eq
!= not_eq ! not ~ compl
然而,个中不和谐处显而易见:
not_eq
鹤立鸡群。此_eq
与余下三个_eq
完全是两码事。- 后两列都是位运算,共七种。其中只有两种带
bit
。and_eq
、or_eq
极具迷惑性。
从概念上说,位运算似比逻辑运算更复杂。位运算即「一位一位地作逻辑运算」。加之今日远没有逻辑运算用得频繁,位运算名称更长合情合理。Python 逻辑运算用英文,位运算用符号,单就长度而言并非最优,不过避免了与 C 的传统直接冲突。
类型系统或可避免此类困难。若严格区分逻辑类型(bool
)与数值类型(如 int
),逻辑运算与位运算的区分便自然形成。可惜人们总是希望「真假」之概念贯穿各类型。由此引出 truthy、falsy 等概念,得失 几何?
倒不是说 bool
非得与 int
断绝关系不可。bool
或可视为一类特殊的 enum
,而 enum
又由 int
实现。关键在于这种关系应是间接的,且须一一对应。false←→0
、true←→1
,井然有序。false←→0
、true←→1
、true←2,3,4,...
,何必?