2

>=および '>' が よりも優先される直感的な理由は何|ですか? 参照。書き込みが一般的であるため、なぜ||低いのか理解できました。ただし、比較の前に OR を実行するとa>b||c思います。a>b|cこれは直感的ではないようです。&^|直感的である比較/等号演算子よりも優先順位が低い例は何ですか?

4

1 に答える 1

7

これは歴史的な事故です。The Development of the C Languageで、Dennis Ritchie は次のように書いています。

彼らの導入が遅かったことは、C の優先順位規則の非効率性を説明しています。B では、次のように書きます。

    if (a==b & c) ...

a が b に等しく、c がゼロでないかどうかを確認します。このような条件式では、& の優先順位が == よりも低い方がよいでしょう。B から C への変換では、そのようなステートメントで & を && に置き換える必要があります。変換の負担を軽減するために、& 演算子の優先順位を == と同じに保ち、&& の優先順位を & からわずかに分離することにしました。今日では、& と == の相対的な優先順位を移動し、それによって一般的な C のイディオムを単純化することが望ましいように思われます: マスクされた値を別の値に対してテストするには、次のように記述する必要があります。

    if ((a&mask) == b) ...

内側の括弧が必要ですが、簡単に忘れてしまいます。

これは、B が論理演算子に and を使用|&、C がこのように示されたビット演算子の優先順位を維持したためです。

于 2012-10-11T22:00:18.470 に答える