Skip to main content

逻辑运算符随想

#TIL C++(以及 C)中的逻辑运算符也可写成英文:(参考

                &&  and         &   bitand      &=  and_eq
|| or | bitor |= or_eq
^ xor ^= xor_eq
!= not_eq ! not ~ compl

然而,个中不和谐处显而易见:

  • not_eq 鹤立鸡群。此 _eq 与余下三个 _eq 完全是两码事。
  • 后两列都是位运算,共七种。其中只有两种带 bitand_eqor_eq 极具迷惑性。

从概念上说,位运算似比逻辑运算更复杂。位运算即「一位一位地作逻辑运算」。加之今日远没有逻辑运算用得频繁,位运算名称更长合情合理。Python 逻辑运算用英文,位运算用符号,单就长度而言并非最优,不过避免了与 C 的传统直接冲突。

类型系统或可避免此类困难。若严格区分逻辑类型(bool)与数值类型(如 int),逻辑运算与位运算的区分便自然形成。可惜人们总是希望「真假」之概念贯穿各类型。由此引出 truthy、falsy 等概念,得失几何?

倒不是说 bool 非得与 int 断绝关系不可。bool 或可视为一类特殊的 enum,而 enum 又由 int 实现。关键在于这种关系应是间接的,且须一一对应。false←→0true←→1,井然有序。false←→0true←→1true←2,3,4,...,何必?

又及:Python 中 2 and 3 等于几?