2022年01月07日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 815 count

演算子の優先順位: 計算の順番を支配する

Written By: 川俣 晶連絡先

この章のテーマ §

 演算子の優先順位について学びます。計算には順番があり、それは制御可能です。

前提知識 §

Console.WriteLineメソッド, +演算子, *演算子,

解説 §

 数学には、同じ数式に足し算とかけ算が含まれていた場合、あとに書かれていてもかけ算を先に計算するルールがあります。

 C#にも同じような【計算の優先順位】のルールがあります。

 これは演算子ごとに優先度が存在しており、これを理解しないと先に計算して欲しかったものがあとから計算されるようなことも起こります。

 全演算子の優先順位は以下の通りです。上の方が先に計算されます。

演算子カテゴリまたは名前
x.y、f(x)、a[i]、x?.y、x?[y]、x++、x--、x!、new、typeof、checked、unchecked、default、nameof、delegate、sizeof、stackalloc、x->y1 次式
+x、-x、!x、~x、++x、--x、^x、(T)x、await、&x、*x、true and false単項
x..y範囲
switch、withswitch および with 式
x * y、x / y、x % y乗法
x + y、x – y加法
x << y、x >> yシフト
x < y、x > y、x <= y、x >= y、is、as関係式と型検査
x == y、x != y等価比較
x & yブール演算の論理 AND またはビット演算の論理 AND
x ^ yブール演算の論理 XOR またはビット演算の論理 XOR
x | yブール演算の論理 OR またはビット演算の論理 OR
x && y条件 AND
x || y条件 OR
x ?? yNull 合体演算子
c ? t : f条件演算子
x = y、x += y、x -= y、x *= y、x /= y、x %= y、x &= y、x |= y、x ^= y、x <<= y、x >>= y、x ??= y、=>代入とラムダ宣言

 この優先順位が不適切な場合は、先に計算させたい部分を括弧()で囲うと、そこを先に計算してくれます。

罠の数々 §

  • 一見、計算に関係ないように見える&&演算子や||演算子なども演算子の一種であり、優先順位が定義されている
  • 計算式を書き直している途中で、書き足した演算子が全体の計算順序を変えてしまうこともある。注意しよう。たとえばあとからかけ算を書き足すと足し算よりそちらが先に計算され、全体の計算順が変わってしまうことがある

参考リンク §

演算子の優先順位

サンプルソース: operatorPrecedence §

Console.WriteLine($"1 + 2 * 3 = {1 + 2 * 3}");

Console.WriteLine($"(1 + 2) * 3 = {(1 + 2) * 3}");

実行結果 §

1 + 2 * 3 = 7

(1 + 2) * 3 = 9

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムで101という結果を期待したが、実際は100だった。

 xが0のとき、x == 0 ? 100 : 200の結果は100になり、これに+1すれば101になるはずだ。

 xが0以外のとき、x == 0 ? 100 : 200の結果は200になり、これに+1すれば201になるはずだ。

 どう直せば思い通りの101/201という結果を得られるだろうか?

int x = 0;

int a = x == 0 ? 100 : 200 + 1;

Console.WriteLine(a);

  1. int a = x == 0 ? 101 : 200 + 1;
  2. int a = x == 0 ? 101 : 201 + 1;
  3. int a = (x == 0 ? 100 : 200) + 1;
  4. int a = 101;
  5. int a = 201;

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
09日
クエリ式の基礎: LINQの2つの顔
3days 0 count
total 758 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
05日
パターン: C#のソースコードの表現力を更に上げるスパイス
3days 0 count
total 1071 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220107105402
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.