1

*CのO'Reillyポケットリファレンスを参照すると、、、、/および%演算子のグループ化の説明に少し混乱しています。この本には、グループ化は左から右に行われると書かれています。今では、グループ化が評価順序と混同されていると思います。次の方程式と本から確立された規則を考えると、私はそれを考えたでしょう...

int x = 4 / 3 * -3

...に評価され0ます、なぜなら...

1: 4 / 3 * -3
2: 4 / -9
3: 0

...しかし、実際にはに評価され-3、この方法を使用しているようです...

1: 4 / 3 * -3
2: 1 * -3
3: -3

何故ですか?

4

8 に答える 8

7

それは私には理にかなっています:

int x = 4 / 3 * -3;

左から右にグループ化すると、次のようになります。

int x = (4 / 3) * -3
int x = ((4 / 3) * -3);

優先順位の表も参照してください。それらは同じ優先順位であるため、左から右にバインドされます。

于 2010-03-03T04:48:37.107 に答える
5

演算子の優先順位結合性の両方を知る必要があります。

乗算(*)は加算(+)よりも優先順位が高いため、Cと通常の数学の両方で2 + 3 * 4は2+(3 * 4)として解釈されます。ただし、2*3/4や2*3 * 4のような式では、演算子はすべて同じ優先順位を持っているため、結合法則を確認する必要があります。ほとんどの演算子では、左から右になります。つまり、左からグループ化を開始します。2* 3/4は(2 * 3)/ 4になり、2 * 3 * 4 * 5は((2 * 3)* 4になります) )*5など。

例外は代入です。これはCの演算子です。代入は右結合法則であるため、a = b =3はa=(b = 3)として読み取る必要があります。

優れたCの本やチュートリアルには、優先順位と結合性の両方を備えたすべての演算子(この演算子など)の表が必要です。

于 2010-03-03T07:28:45.893 に答える
2

次のURLにアクセスしてください。これは、Cのすべてのトピックに非常に役立ちます。したがって、演算子の優先順位も使用できます。

http://www.goldfish.org/books/The%20C%20Programming%20Language%20-%20K&R/chapter2.html#s2.12

于 2010-03-03T07:15:31.673 に答える
1

ここでは、システム認識のために結合性が残されています。したがって、式を評価するためだけに2番目の例を実行します。

于 2010-03-03T04:56:13.407 に答える
1

私見ですが、これらの演算子の優先順位について知っておくのは良いことですが、疑わしい場合は常に括弧を使用することをお勧めします:-)。マスターが言うように、コードは機械よりも人間の読者向けです。作者がわからない場合、または読者もわからない場合。

于 2010-03-03T05:29:49.547 に答える
0

これらの リンクはあなたを助けるはずです。

于 2010-03-03T04:49:36.043 に答える
0

乗算と除算は結合性のままなので、2番目の順序が発生します。演算は(4/3)としてグループ化され、結果は-3で乗算されます。

于 2010-03-03T04:50:08.063 に答える
0

数学の場合、Cはあなたが高等学校で学んだのと同じように機能します。BODMAS(除算、乗算、加算、減算のブラケット)を覚えておいてください。これは、左から右に計算を探すことを意味します。この場合4/3、回答を確認して計算し、回答に-3を掛けます。角かっこを使用してそれを修正できます(4/(3*-3))。Cが演算子を注文して計算を実行する方法の概要については、このページを参照してください。

于 2010-03-03T04:50:47.313 に答える