3

C ライクな言語で何度か遭遇した落とし穴は次のとおりです。

original | included & ~excluded   // BAD

優先順位により、これは次のように解析されます。

original | (included & ~excluded)   // '~excluded' has no effect

ビットごとの演算子の 3 つの個別の優先順位レベルの最初の設計上の決定の背後にあるものを知っている人はいますか? さらに重要なことは、あなたはその決定に同意しますか、そしてその理由は何ですか?

4

2 に答える 2

7

演算子は、少なくともC以来、この優先順位を持っています。

+( 、*および否定)に最も類似している算術演算子の相対順序と同じ相対順序であるため、順序に同意します。

&vs*|vsの類似点は次の+とおりです。

AB | A&B A*B | A|B A+B
0 0 | 0 0 | 0 0
0 1 | 0 0 | 1 1
1 0 | 0 0 | 1 1
1 1 | 1 1 | 1 2

ビットごとの否定と否定の類似性は、次の式で確認できます。

~A = -A - 1
于 2010-09-16T20:35:32.483 に答える
1

Mark Byers の答えを拡張するために、ブール代数 (論理回路を最小数のゲートに単純化し、競合状態を回避するために電気技師によって広く使用されている) では、ビットごとの AND がビットごとの OR よりも優先されるという伝統があります。C は、この確立された伝統に従っているだけです。http://en.wikiversity.org/wiki/Boolean_algebra#Combining_Operationsを参照してください:

乗算が加算よりも優先される通常の代数と同様に、AND は OR よりも優先 (または優先) されます。

于 2010-09-16T20:48:37.767 に答える