つまり、JavaやC#のような言語には、ビット演算子と論理演算子の両方があります。
論理演算子はブールオペランドでのみ意味があり、ビット演算子は整数型でも機能します。Cにはブール型がなく、ゼロ以外のすべての整数をtrueとして扱うため、論理演算子とビット演算子の両方が存在することは理にかなっています。ただし、JavaやC#などの言語にはブール型があるため、コンパイラは型のコンテキストに応じて適切な種類の演算子を自動的に使用できます。
では、これらの言語で論理演算子とビット演算子の両方を使用する具体的な理由はありますか?それとも、親しみやすさの理由で含まれているだけですか?
(ブール値のコンテキストで「ビット単位」演算子を使用してJavaとC#の短絡を回避できることは承知していますが、そのような動作は必要なかったので、ほとんど使用されていない特殊なケースである可能性があります)