逻辑运算符随想
#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,...,何必?