Java 和 C# 等语言都有按位运算符和逻辑运算符。
逻辑运算符只对 boolean 操作数有意义,按位运算符也适用于整数类型。由于 C 没有 boolean 类型并将所有非零整数视为真,因此逻辑运算符和按位运算符的存在在那里是有意义的。但是,Java 或 C# 等语言具有 boolean 类型,因此编译器可以根据类型上下文自动使用正确类型的运算符。
那么,在这些语言中同时使用逻辑运算符和按位运算符是否有一些具体原因?还是只是出于熟悉的原因才将它们包括在内?
(我知道您可以在 boolean 上下文中使用“按位”运算符来规避 Java 和 C# 中的短路,但我从来不需要这样的行为,所以我猜它可能是一个几乎未使用的特殊例)
最佳答案
1) is there some concrete reason for having both logical and bitwise operators in those languages?
是的:
- 我们有 boolean 运算符来执行 boolean 逻辑(基于 boolean 值)。
- 我们有按位运算符来执行按位逻辑(对整数值)。
2) I am aware that you can use the "bitwise" operators in a boolean context to circumvent the short-circuiting in Java and C#,
就 C# 而言,这根本不是真的。
例如,C# 有 2 个 boolean AND 运算符:&
(完整)和 &&
(短),但它不允许对 boolean 值进行按位运算。
因此,逻辑运算符和按位运算符之间确实没有“重叠”或冗余。两者不适用于同一类型。
关于c# - 为什么 Java 和 C# 中的逻辑运算符和按位运算符之间存在区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114179/