e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。
オンライン書籍; インド式プログラミングバイブル C言語入門 (上)
第 1 章 : C言語入門 始めに(書籍のプレビュー)
インド式プログラミングバイブル C言語入門
この記事は、2008年4月から発売の「インド式プログラミングバイブル C言語入門 (上)」より掲載しました。書籍の情報は、こちらをご覧ください。
演算の序列
2つ以上の演算子が含まれている算術式を実行する場合、どのような順番で演算を行うのか、と言う問題が生じます。例えば、式2 * x - 3 * y に相当するのは、(2x)-(3y) なのでしょうか、それとも2(x-3y)なのでしょうか?また、A / B * C は、A / (B * C)、または (A / B) * Cと同じなのでしょうか?このような問題を正しく解決するには、演算の「序列」を理解していなければなりません。演算が、算術式の中で実行される際の順番や優先順位は、演算の序列と呼ばれます。図1.8は、よく使われる演算子の優先順位を示しています。
| 優先順位 |
演算子 |
内 容 |
|---|---|---|
| 1位 | * / % | 乗算、除算、剰余 |
| 2位 | + - | 加算、減算 |
| 3位 | = | 代入 |
| 図 1.8 |
以下は、演算子を使う上での、一般的な注意事項です。
- ( )内では、図1.11に示す序列が適用されます。また、複数組みの( )がある場合は、内側にある( )の中から先に計算され、外側に向かって順番に計算されます。
- ( )は、必ず対の状態で使うものとします。右向きの「( 」と左向きの「 )」の数の不一致は、よくある間違いです。この間違いを防ぐ最善の方法は、まず「( )」とタイプしてから、その中身の式をタイプ入力します。
演算の序列について、もう少し詳しく、例を使って見てみましょう。
例 1.1:演算の序列を見極めて、以下の式を評価してみましょう。式中のiは、整数変数とします。
i = 2 * 3 / 4 + 4 / 4 + 8 - 2 + 5 / 8
上の式の演算を段階的に記すと、以下の通りになります。
| i = 2 * 3 / 4 + 4 / 4 + 8 - 2 + 5 / 8 | |
| i = 6 / 4 + 4 / 4 + 8 - 2 + 5 / 8 | 演算対象: * |
| i = 1 + 4 / 4 + 8 - 2 + 5 / 8 | 演算対象: / |
| i = 1 + 1+ 8 - 2 + 5 / 8 | 演算対象: / |
| i = 1 + 1 + 8 - 2 + 0 | 演算対象: / |
| i = 2 + 8 - 2 + 0 | 演算対象: + |
| i = 10 - 2 + 0 | 演算対象: + |
| i = 8 + 0 | 演算対象 : - |
| i = 8 | 演算対象: + |
「6/4」の結果が、1.5ではなく、1になっていることに注意してください。これは、6と4が両方整数であるため、その結果は必ず整数定数になるからです。「5/8」も同様に、整数定数である5と8は整数値を戻すため、結果は0になります。
例 1.2:演算の序列を見極めて、以下の式を評価してみましょう。式中のkkは、浮動小数変数とします。
kk = 3 / 2 * 4 + 3 / 8 + 3
上の式の演算を段階的に記すと、以下の通りになります。
| kk = 3 / 2 * 4 + 3 / 8 + 3 | |
| kk = 1 * 4 + 3 / 8 + 3 | 演算対象: / |
| kk = 4 + 3 / 8 + 3 | 演算対象: * |
| kk = 4 + 0 + 3 | 演算対象: / |
| kk = 4 + 3 | 演算対象: + |
| kk = 7 | 演算対象: + |
ここでも、前の例での説明したのと同様の理由から、「3/8」の結果が0となっています。
すべてのC の演算子には、その優先順位に基づいて順位が付けられます。しかも、面倒なことに、C には45個もの、一風変わった演算子が存在しており、気を付けて取り扱わなければ、式の値を求める際、思いがけない影響を与えてしまうことになります。残念なことに、演算子には、代数の授業で習う「BODMAS( Brackets, Orders, Division, Multiplication, Addition)」のような、式の評価順序を決める簡単な規則がありません。今のところ、その45個のうち数個を使用しただけなので、優先順位についても、この章ではこれ以上詳しく取り上げません。しかし、すべての演算子の優先順位を覚えることはほとんど不可能だと実感できると思います。付録Aに、すべての演算子と、その優先順位を載せてあるので、目を通してみてください。見るだけで嫌になるかもしれませんが、内容を少しずつかみ砕いていけば、徐々に受け入れやすくなるはずです。
ここまでの内容では、コンピュータがどのようにして、C で記述された算術式の値を求めるのかを見てきました。しかし、普通の数式を、C の命令文に書き直す方法が分かっていなければ、知識としては不十分と言えるでしょう。C では、どんな複雑な式でも簡単に扱えます。図1.9に、C の式の例をあげてみました。
| 代数での式 |
Cでの式 |
|---|---|
| a × b – c × d | a * b – c * d |
| (m + n) (a + b) | (m + n) * (a + b) |
|
|
3 * x * x + 2 * x + 5 |
|
|
( a + b + c ) / ( d + e ) |
|
|
2 * b * y / ( d + 1 ) – x / 3 * ( z + y ) |
| 図 1.9 |



