为什么Java和C#中的逻辑运算符和按位运算符有区别?

Ask*_*aga 9 c# java bitwise-operators logical-operators

Java和C#等语言都有按位和逻辑运算符.

逻辑运算符只对布尔操作数有意义,按位运算符也适用于整数类型.由于C没有布尔类型并且将所有非零整数视为真,因此逻辑和按位运算符的存在在那里是有意义的.但是,Java或C#等语言具有布尔类型,因此编译器可以自动使用正确类型的运算符,具体取决于类型上下文.

那么,是否有一些具体的理由在这些语言中同时使用逻辑和按位运算符?或者他们是否因熟悉原因而被包括在内?

(我知道你可以在布尔上下文中使用"按位"运算符来规避Java和C#中的短路,但我从来没有需要这样的行为,所以我想这可能是一个大多未使用的特殊情况)

Hen*_*man 6

1)在这些语言中是否有一些具有逻辑和按位运算符的具体原因?

是:

  • 我们有布尔运算符来做布尔逻辑(在布尔值上).
  • 我们有按位运算符来执行按位逻辑(在整数值上).

2)我知道你可以在布尔上下文中使用"按位"运算符来规避Java和C#中的短路,

就C#而言,这根本不是真的.
C#有例如2个布尔AND运算符:( &完整)和&&(短)但它不允许对布尔值进行按位运算.

因此,逻辑和按位运算符之间确实没有"重叠"或冗余.这两个不适用于相同的类型.


mad*_*ead 2

我会说对于Java

  • 逻辑运算符用于布尔值,位运算符用于整数。它们不能混合。
  • 为什么不将它们简化为一个运算符,例如“&”或“|”?Java 被设计为对 C/C++ 用户友好,因此它继承了他们的语法。如今,由于向后兼容性,这些运算符无法减少。