c# - 为什么 Java 和 C# 中的逻辑运算符和按位运算符之间存在区别?

标签 c# java bitwise-operators logical-operators

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/

相关文章:

java - 批量加载到HBase:错误:java.lang.ClassCastException:org.apache.hadoop.io.FloatWritable无法转换为org.apache.hadoop.hbase.Cell

java - 部署 Eclipse 插件的完整过程

c - 如何有效地将两个16位字逐位组合成一个32位字?

c - C 中的按位运算 : Can't figure out why XOR does not work. 我的代码或逻辑是否有缺陷?

c# - 使用未给出预期值的标志属性解析枚举

c# - 如何在不使用 C# 将其设置为默认打印机的情况下直接打印到 zebra 打印机?

c# - .NET 中的多线程 - 在后台实现计数器

c# - 计算枚举上设置的标志数

c# - ASP.NET Web API 和 [Serializable] 类

java - 在 java 浏览器中部署 HTML 文件