今週の話題

ゲームソフト販売本数ランキング:今週1位は「スーパー マリオパーティ ジャンボリー(Switch)」GO!
「ホロライブ」運営カバーが業績好調、トレカのヒットなど着実に事業拡大―インディーゲーム支援やメタバースが更なる成長のカギ【ゲーム企業の決算を読む】GO!
セガサミーの上期は高進捗で折り返し、『龍が如く』『ソニック』『メタファー』と大型タイトルが続く下期に期待【ゲーム企業の決算を読む】GO!
Live2D、クリエイターの知見を共有する「Live2Dデータベース」を公開―「Live2D」採用作品情報を集約 GO!
テンセント、『鳴潮』のKuro Gamesの過半数株式を取得―独立した運営を継続する方針 GO!

ユービーアイの対戦FPS『エックスディファイアント』2025年6月に終了へ 大阪やサンフランシスコのスタジオも閉鎖と悪いニュース続く GO!
発売目前の『インディ・ジョーンズ/大いなる円環』にDRM「Denuvo」は採用されていない―ベセスダ公式がユーザーの“懸念”をキッパリと否定 GO!

前回のコメント

・とうとうif文が出てきて次が楽しみです。
・理解できた

 何よりです。

・演算子の部分はなかなか理解するのが難しかったです。if文はたぶんついていけていると思うのでこのまま頑張っていきたいです。

 応援します。
 演算子の中でも関係演算子と条件演算子はif-else構文を理解するとわかりやすくなるのではと思います。

・今日も楽しく授業を受けることができました。
 ありがとうございます。
 コピーペーストで内容をメモ帳に貼り付けていただいているのですが、メモが追いつかない事もあって説明を少しだけ聞き逃してしまいます。
 重要な部分はメモ帳にタイピングしながら説明いただくなどで、少し書く時間などを増やしてもらう事は可能でしょうか。
 (先生の体調もあるので、無理そうであれば大丈夫です)

 ご心配をおかけして申し訳ありません。
 用意してある講義メモを用いているのは時間短縮が目的ですが、受講ペースを乱すようでしたら自粛します。

・ユニティの授業で出てきたIF構文がでてきてテンション上がりました。
 すみません完全に頭がパンクしてコンソールという単語にゲシュタルト崩壊起こしました。
 コンソールってなんですか。

 コンソールにはいろいろな意味がありますが、Visual Studioにおいては、
 実行結果の表示やキーボードからの入力に用いる背景が黒いウィンドウです。
 コンソールウィンドウを用いるアプリケーションを、コンソールアプリケーションといいます。

・関係演算子の復習のため、作成してみました。
 講義メモに乗っていた内容を試してみましたが、すこしつまづいてしまいました。
 調べたりしてなんとなくできたのですが、少し解説もらえると嬉しいです。
 質問内容を記載したPDFをお送りしますので、確認願います。

 拝見しました。ちゃんとできています。
 まず、基礎中の基礎である下記をしっかり理解しましょう。

 ① 変数などは宣言が必要であり、先頭に「データ型」を書いた文が宣言になる。
 ② 宣言の中に「=」を入れると初期化になる
 ③ 先頭に「データ型」を書いていない文は処理の文で、中に「=」を入れると代入になる。
 ④ 宣言していない変数には代入できない。宣言済の変数の宣言や初期化はできない。
 ⑤「=」の左には変数を書く。「=」の右には値か値を返す式を書く。「=」は「等しい」ではない。
 ⑥ エラーはミスのある行に表示されるとは限らない。

 条件演算子は比較によりどちらかの結果を返す演算子ですので、結果を受け取る代入式にします。
 書式例: 変数 = (比較式) ? 式がtrueの場合の値や式 : 式がfalseの場合の値や式 ;
 この変数が事前に宣言されているものではない場合、条件演算子を用いる式を初期化に利用できます。
 書式例: データ型 変数 = (比較式) ? 式がtrueの場合の値や式 : 式がfalseの場合の値や式 ;
 代入と初期化の違いを理解してください。
 なお、C#では、宣言したり初期化した変数を使わないまま終わると「使わないの?」的な警告が出ます。
 おせっかいな機能ですが、ミスを防止する意味があります。
 文法の確認などが目的で「使わないけどOK」なら警告を無視できますが、
 売り物や、他者に見せるプログラムでは「未完成、または、手抜き」とみなされます。気を付けましょう。

講義メモ:第5章 制御文

p.101 制御文とは

・C#のプログラムは3つの構造の組み合わせで記述する。それが「順次」「分岐」「繰返し」
・例外的な状況に対応できるもう一つの制御が「ジャンプ」で、一部を除いて非推奨とされている
・この「分岐」「繰返し」「ジャンプ」を行うのが制御文

p.101 if文

・条件分岐を行える構文でいくつかのパターンがある
・基本構文: if(条件文) { 条件文がtrueである時に実行する文 }
・条件文にはbool型の変数または式を記述できるので、主に、関係演算子(p.88)の文を用いることが多い
・例: 
 if(a > 0) { 
   Console.WriteLine("aは正の数です"); 
 }
・条件文がtrueである時に実行する文が1文のみの場合、{}を省略できる
 ※ 省略することを禁止するチームルールの場合もある
・通常、「{」の後と、「}」の前に改行を入れて、その間をインデント(字下げ)するので、Visual Studioに自動的に行う機能が入っている
 ※ Visual Studioの既定では「{」の前にも改行を自動挿入するが、利用者が設定を変えることができる。
・条件文がtrueである時に実行する文は複数記述できるが、{}は省略できないので注意
 例: if (a > 0) b = 100; c = 200; ⇒ if (a > 0) {b = 100}; c = 200; と解釈される。

p.102(if-else構文)

・if文に「そうでなければ」を加える構文
・基本構文: if(条件文) { 条件文がtrueである時に実行する文 } else { 条件文がfalseである時に実行する文 }
・例: 
 if(a > 0) { 
   Console.WriteLine("aは正の数"); 
 } 
 else { 
   Console.WriteLine("aは負の数か0"); 
 }
・条件文がtrue/falseである時に実行する文が1文のみの場合、{}を省略できる
 ※ 省略することを禁止するチームルールの場合もある。特に片方だけ省略は避けた方が良い
・elseはifの1個につき1個のみ記述でき、ifのないelseはエラーになる
・条件文がfalseである時に実行する文も複数記述できるが、{}は省略できないので注意
・なお、if-else構文によってなんらかの値を定めるような処理は条件演算子でも書ける
・例: Console.WriteLine((a > 0) ? "aは正の数": "aは負の数か0"); 

p.102(if-else if構文)

・if文に「そうでなくて、もしも」を加える構文
・基本構文: 
 if(条件文①) { 条件文①がtrueである時に実行する文 } 
 else if(条件文②) { 条件文①がfalseで条件文②がtrueである時に実行する文 }
・例: if(a > 0) { Console.WriteLine("aは正の数"); } else if(a < 0) { Console.WriteLine("aは負の数"); }
・else ifはifの1個につきいくつでも記述でき、ifのないelse ifはエラーになる
・よって、多分岐構文が可能
・例: 
 if(a == 0) { 
   Console.WriteLine("aは0"); 
 }
 else if(a == 1) { 
   Console.WriteLine("aは1"); 
 }
 else if(a == 2) { 
   Console.WriteLine("aは2"); 
 }
・最後のelse ifの後に、elseを書いて「上記のどれでもなければ」を加えることが出来る
・例: 
 if(a == 0) { 
   Console.WriteLine("aは0"); 
 }
 else if(a == 1) { 
   Console.WriteLine("aは1"); 
 }
 else if(a == 2) { 
   Console.WriteLine("aは2"); 
 }
 else { 
   Console.WriteLine("aは0でも1でも2でもない"); 
 }

アレンジ演習:p.104 if01.cs

・nの値を10固定ではなくて、コンソールから入力するようにしよう

作成例

//アレンジ演習: p.104 if01.cs
using System;
class if01
{
    public static void Main()
    {
        int n;
        //n = 10;
        Console.Write("n : "); n = int.Parse(Console.ReadLine()); //【変更】nを入力
        if (n > 5) { //式「n > 5」の評価がtrueなら後続のブロック内を実行
            Console.WriteLine("nは5より大きい");
        } 
        else { //falseなら後続のブロック内を実行
            Console.WriteLine("nは5より大きくはない");
        }
    }
}

アレンジ演習:p.104 if01.cs・その2

・「nは5より大きくはない」ではなく、nの値が5の場合は「nは5」、5未満の場合は「nは5より小さい」と表示しよう
・つまり、3分岐構造にしよう

作成例

//アレンジ演習: p.104 if01.cs その2
using System;
class if01
{
    public static void Main()
    {
        int n;
        //n = 10;
        Console.Write("n : "); n = int.Parse(Console.ReadLine()); //【変更】nを入力
        if (n > 5) { //式「n > 5」の評価がtrueなら後続のブロック内を実行
            Console.WriteLine("nは5より大きい");
        } 
        else if (n < 5) { //上記がfalseで式「n < 5」の評価がtrueなら後続のブロック内を実行
            Console.WriteLine("nは5より小さい");
        } 
        else { //上記の両方がfalseなら後続のブロック内を実行
            Console.WriteLine("nは5");
        }
    }
}

提出:アレンジ演習:p.104 if01.cs・その3

・比較対象の値も5固定ではなくて、コンソールから入力するようにしよう

講義メモ

・p.89「論理演算子」から

提出フォロー:ミニ演習 mini088b.cs・改造

・コンソールから2つの整数を入力して変数aとbに代入し(p.46参照)、小さい方を表示しよう

作成例

//ミニ演習 mini088b.cs・改造
using System;
class mini088a
{
    public static void Main()
    {
        Console.Write("a : "); //表示し改行しない
        int a = int.Parse(Console.ReadLine()); //コンソールから文字列を読み込んで整数化した値で初期化
        Console.Write("b : "); //表示し改行しない
        int b = int.Parse(Console.ReadLine()); //コンソールから文字列を読み込んで整数化した値で初期化
        Console.WriteLine("小さい方は{0}", (a < b) ? a : b); //aとbの小さい方を表示
    }
}

p.89 論理関係演算子・否定演算子

・2つのbool値を返す式の間に置いて、bool値を返す演算
・2項&&演算子:両方がtrueならtrueを、でければfalseを返す。論理積、「かつ」「AND」ともいう
 例: (a > 0 && b > 0) ? "aもbも正の数" : "どちらかは正の数ではない"
・2項||演算子:両方がfalseならfalseを、でければtrueを返す。論理和、「または」「OR」ともいう
 例: (a > 0 || b > 0) ? "aとbのどちらかまたは両方が正の数" : "どちらも正の数ではない"
・単項!演算子:値や式がtrueならfalseを、でければtrueを返す。否定、「NOT」ともいう
 例: !(a > 0) ? "aは正の数じゃない" : "aは正の数"
・単項!演算子は複雑な条件式を反転したい場合に用いる
 例: !(a > 0 && b > 0) ? "「aもbも正の数」ではない" : "aもbも正の数"
・単項!演算子は単純にbool型の変数値を反転したい場合にも便利 bool a = true, b = !a;

p.89 ビット論理演算子

・値を2進数表現にして、ビットごとに計算した結果によるビット列を返す
・2項&演算子:両方が1なら1を、でければ0を返す。
・2項|演算子:両方が0なら0を、でければ1を返す。
・2項^演算子:同じなら0を、でければ1を返す。別名:排他的論理和
・単項~演算子:全ビットを反転した結果を返す。別名:(1の)補数

p.90(短絡評価)

・2項&&演算子と2項||演算子のもつ、途中で結果が確定したときは先に進むという特長のこと
・これにより、無駄な動作の除外が可能
・例:「多くの計算① && 多くの計算②」とすると、多くの計算①がfalseなら②は実行せずにfalse確定
・例:「多くの計算① || 多くの計算②」とすると、多くの計算①がtrueなら②は実行せずにtrue確定
・これにより、異常終了の回避が可能
・例:「a != 0 && 5 / a > 2」とすると、もしもaが0だと「5 / a」は異常終了するが、「a != 0」がfalseになるので
 「5 / a」は実行されない=異常終了の回避が可能

ミニ演習 mini090.cs

・int型の値を入力して「100 / 入力値」が50超かを表示するプログラムを作成しよう
・まず、短絡評価を用いないと0が入力されたときに、異常終了することを確認しよう
・それから、短絡評価を用いて0が入力されたときに、異常終了しないことを確認しよう

作成例 その1 短絡評価を用いないと0が入力されたときに、異常終了する

//ミニ演習 mini090.cs
using System;
class mini090
{
    public static void Main()
    {
        Console.Write("100を何で割る? : "); //表示し改行しない
        int a = int.Parse(Console.ReadLine()); //コンソールから文字列を読み込んで整数化した値で初期化
        Console.WriteLine((100 / a > 50) ? "50超です" : "50以下です"); //結果表示
    }
}

作成例 その2 短絡評価を用いて0が入力されたときに、異常終了しない

//ミニ演習 mini090.cs
using System;
class mini090
{
    public static void Main()
    {
        Console.Write("100を何で割る? : "); //表示し改行しない
        int a = int.Parse(Console.ReadLine()); //コンソールから文字列を読み込んで整数化した値で初期化
        Console.WriteLine((a != 0 && 100 / a > 50) ? "50超です" : "50以下か∞です"); //結果表示
    }
}

p.90 bitwise01.cs

//p.90 bitwise01.cs
using System;
class bitwise01
{
    public static void Main()
    {
        byte a = 2, b = 3; //2進数4桁にすると 2⇒0010 3⇒0011
        Console.WriteLine(a & b); // 0010 & 0011 = 0010 となり10進数の2
        Console.WriteLine(a | b); // 0010 | 0011 = 0011 となり10進数の3
        Console.WriteLine(a ^ b); // 0010 ^ 0011 = 0001 となり10進数の1
        Console.WriteLine(); //改行
        bool x = true, y = false; //trueは2進数の1、falseは2進数の0
        Console.WriteLine(x & x); //1 & 1 = 1 ⇒ True
        Console.WriteLine(x & y); //1 & 0 = 0 ⇒ False
        Console.WriteLine(y & y); //0 & 0 = 0 ⇒ False
        Console.WriteLine(); //改行
        Console.WriteLine(x | x); //1 | 1 = 1 ⇒ True
        Console.WriteLine(x | y); //1 | 0 = 1 ⇒ True
        Console.WriteLine(y | y); //0 & 0 = 0 ⇒ False
        Console.WriteLine(); //改行
        Console.WriteLine(x ^ x); //1 ^ 1 = 0 ⇒ False
        Console.WriteLine(x ^ y); //1 ^ 0 = 1 ⇒ True
        Console.WriteLine(y ^ y); //0 ^ 0 = 0 ⇒ False
    }
}

p.94 代入演算子(及び複合代入演算子)

・代入の「=」記号は、実は2項=演算子で、優先度が低いが用途のバリエーションは多い
・主に四則演算と代入の組み合わせで「● = ● 演算子 式や値」となる場合に、簡略記述に用いられるのが複合代入演算子で
 「● 演算子= 式や値」とできる。
・例:
 x = x + 10; ⇒ x += 10 // xに10を足しこむ
 y = y - 10; ⇒ y -= 10 // yから10を差し引く
 z = z * 5;  ⇒ z *= 5; // zを5倍にする
 w = w / 5;  ⇒ w /= 5; // wを1/5にする
 m = m % 5;  ⇒ m %= 5; // mを5で割った余りにする 応用例⇒ y %= 100; //yを下2桁にする(例:2024⇒24)

p.95 代入演算子(暗黙の型変換)

・同種だが型が異なる変数などへの代入では、左辺より、右辺の対象範囲が広い場合、暗黙の型変換を起こり、問題なく代入される
 例: short s = 5; int i; i = s; //暗黙の型変換が起こり、int型に拡大変換されたsがiに代入される
・拡大変換を丸暗記する必要はないが、実数型から整数型へは不可で、整数型から実数型へは基本的に可能。

p.97 演算子の優先順位

・演算子の優先順位は丸暗記の必要はなく、優先順位が特殊な式ではカッコで優先度を明示すると良い
・なお、代入演算子、複合代入演算子が優先順位最下位であることは意識しておくと良い

p.97 演算子の結合規則

・同じ優先度の演算子が複数並ぶ場合、基本的には左から評価する。これを「左から右への結合」という
 ※ C/C++では「左結合」という
・一部の演算子では「右から左への結合」があり、最も有名なのは代入演算子。
 例: a = b = 5; //5をbに代入し、その評価値である5をaに代入(結果的にaとbに5を代入したことになる)
  つまり「a = (b = 5);」と同じ意味。
 ※ちなみに、初期化における「=」の多重使用(例:int a = b = 1;)は不可。
 「int a = 1, b = 1;」とするか「int a = 1, b = a;」とすれば良い。
 ※なお、2項=演算子の左辺には変数のみ記述可能なので「変数 = 変数 = 変数 = 変数 = 変数 = 変数 = 値や式;」という構文のみ可。

今週の話題

ゲームソフト販売本数ランキング:今週1位も「ドラゴンクエストIII そして伝説へ…(Switch)」 GO!
バンク・オブ・イノベーションは4Q赤字で着地、『メメントモリ』ヒットの恩恵から抜け出す時期は【ゲーム企業の決算を読む】 GO!
ソニーのゲーム事業は見通しを上方修正、ただし「12本のライブサービスゲーム」計画は厳しい状況 GO!

Steamの2021年の独占禁止法訴訟は大規模な集団訴訟へ発展―すべてのSteam上開発者が自ずとValveを訴えることに GO!
中国で2026年に「ニンテンドーeショップ」およびネットワーク関連サービス終了へ―ユーザーには最大4本のゲームプレゼントも GO!

前回のコメント

・演算子が出てきて少し難しかったが理解することができた。
・授業ありがとうございました
・理解できた

 何よりです。

・今回もありがとうございました。
 復習もしたのでついていけましたが、
 まだコンソールリードラインメソッドがうまく使えないので、
 次までにそこを詰めておこうと思います。

 是非、自分のものにしてください。

・本日もありがとうございました。
 比較演算子 やってることを理解してから演習に臨むようにします。
 ゲーム会社の情報とか業界の情報はどんなサイトで先生は見るようにしてますか。
 就活などで企業の動向をチェックするときに何を見ると参考にできるか聞きたいです

 「今週の話題」で利用している「gamebusiness.jp」です。

講義メモ 後半

p.85 インクリメント演算子、デクリメント演算子

・単項++演算子:「変数 = 変数 + 1」を「変数++」または「++変数」と記述でき、インクリメント演算子ともいう。
・「++変数」を前置インクリメント演算子、「変数++」を後置インクリメント演算子という
・前置と後置は単独で行う場合は同じ意味だが、評価のタイミングが異なる
・前置の場合:1を足しこんで、その結果を評価とする
・後置の場合:現在の値を評価としてから、1を足しこむ
・例: int i = 10; Console.Write(++i); Console.Write(i); //11 11となる
・例: int i = 10; Console.Write(i++); Console.Write(i); //10 11となる
・C#では実数型変数にも利用可能で、1.0が加算される
・単項--演算子:「変数 = 変数 - 1」を「変数--」または「--変数」と記述でき、デクリメント演算子ともいう。動作は「++」と同様

アレンジ演習:p.86 increment01.cs

・「a++ + 10」と「++b + 10」がどうなるかも確認しよう

作成例

//アレンジ演習:p.86 increment01.cs
using System;
class increment01
{
    public static void Main()
    {
        int a = 10;
        Console.WriteLine(a++); //aの値を表示(10)してから+1してaは11になる
        Console.WriteLine(a); //aの値は11になっている(11)
        //【以下追加】
        Console.WriteLine(a++ + 10); //aは11なのでa+10の21を表示してから+1してaは12になる
        Console.WriteLine(a); //aの値は12になっている(12)

        int b = 10;
        Console.WriteLine(++b); //bに+1してbは11になり、それから表示(11)
        Console.WriteLine(b); //bの値は11になっている(11)
        //【以下追加】
        Console.WriteLine(++b + 10); //bに+1してbは12になり、それから+10して表示(22)
        Console.WriteLine(b); //bの値は12になっている(12)
    }
}

アレンジ演習:p.87 increment02.cs

・char型変数、string型変数、bool型変数をインクリメント、デクリメントできるかも確認しよう

作成例

//アレンジ演習:p.87 increment02.cs
using System;
class increment02
{
    public static void Main()
    {
        double a = 1.25;
        decimal d = -12.3M;
        Console.WriteLine(++a); //double型の1.0を加算し2.25
        Console.WriteLine(--d); //decimal型の-1.0Mを加算し-13.3Mになり、表示は-13.3
        //【以下追加】
        char c = 'a';
        Console.WriteLine(++c); //'b'(文字コードで次の文字になる)
        string s = "ABC";
        //Console.WriteLine(++s); //文法エラー
        bool b = true;
        //Console.WriteLine(++b); //文法エラー
    }
}

p.88 関係演算子

・値の大小関係によりbool型(p.57)の戻り値を返す演算子の総称
・2項==演算子:左辺と右辺の値が等しければtrue、でなければfalse
 ※「= =」はNG(途中に空白は不可)
・2項!=演算子:左辺と右辺の値が等しければfalse、でなければtrue
 ※「! =」はNG(途中に空白は不可)逆の「=!」はNG
・2項>=演算子:左辺の値が右辺の値以上ならばtrue、でなければfalse
 ※「> =」はNG(途中に空白は不可)逆の「=>」はNG
・2項<=演算子:左辺の値が右辺の値以下ならばtrue、でなければfalse
 ※「< =」はNG(途中に空白は不可)逆の「=<」はNG

ミニ演習 mini088a.cs

・bool型の変数aに式「10 == 8 + 2」の評価を初期値として与えて、表示してみよう
・bool型の変数bに式「1 + 3 != 4」の評価を初期値として与えて、表示してみよう

作成例

//ミニ演習 mini088a.cs
using System;
class mini088a
{
    public static void Main()
    {
        bool a = (10 == 8 + 2); //関係演算式の評価を初期値として与える
        Console.WriteLine(a); //True
        bool b = (1 + 3 != 4);  //関係演算式の評価を初期値として与える
        Console.WriteLine(b); //False
    }
}

p.88 条件演算子

・C#では唯一の3項演算子で、制御構造を演算子で実装できる
・書式: bool型の式 ? 式がTrueの場合の値や式 : 式がfalseの場合の値や式
・「:」の前後のどちらかだけが実行されるので「もしも●なら▲をでなければ■を」という構文になる
例: Concole.Write(a > 0 ? "正の数" : "正の数ではない");
例: int max = (a > b) ? a : b; //aとbの大きい方をmaxに代入
・つまり、分岐構造を演算子で表現したもの
・一般に誤読防止の為にbool型の式をカッコで囲むことが多い
・なお、bool型の式は変数でも良い
例: 
 bool x = a > b; //xにはa>bならtrue、でなければfalseが入る
 int max = (x) ? a : b; //xにより、どちらが大きいか分かるので、大きい方をmaxに代入
・ただし「:」以降は省略不可なので「でなければ●を返す」が必須なので注意。

ミニ演習 mini088b.cs

・コンソールから2つの整数を入力して変数aとbに代入し(p.46参照)、大きい方を表示しよう

作成例

//ミニ演習 mini088b.cs
using System;
class mini088a
{
    public static void Main()
    {
        Console.Write("a : ");
        int a = int.Parse(Console.ReadLine());
        Console.Write("b : ");
        int b = int.Parse(Console.ReadLine());
        int max = (a > b) ? a : b; //aとbの大きい方をmaxに代入
        Console.WriteLine("大きい方は{0}", max);
    }
}

提出:ミニ演習 mini088b.cs・改造

・コンソールから2つの整数を入力して変数aとbに代入し(p.46参照)、小さい方を表示しよう

講義メモ

・第4章「演算子」に進みます

第4章 演算子

p.79 式と演算子

・「+」や「-」などの計算や操作を表す記号や単語を演算子という
・演算子の対象をオペランド(項)といい、演算子の種類によって用いる数が異なる
 例:「a + b」はオペランドが2つなので「2項+演算子」という
・式を計算して結果を得ることを「評価する」という
 例:2項+演算子の評価は加算結果になる
・代入の「=」も演算子であり、代入式は「2項=演算子」になっている
・2項=演算子の評価は代入値になる
 例: c = 3 + 4 とすると「3 + 4」の評価である7がcに代入され、評価は7
・演算子は基本的に左から評価されるが、「2項=演算子」のように右から評価するものもある

アレンジ演習:expression01.cs

・式「a = 5 + 2」の評価も7になることを確認する処理を追加しよう

作成例

//アレンジ演習:p.80 expression01.cs
using System;
class expression01 
{
    public static void Main() 
    {
        int a = 0; //整数型変数aの初期化(宣言と初期値の代入)
        Console.WriteLine("a = {0}", a); //aの値を表示
        Console.WriteLine("(a = 7)の値は{0}", a = 7); //式「a = 7」の評価(7)を表示
        Console.WriteLine("(a = 5 + 2)の値は{0}", a = 5 + 2); //【追加】式「a = 5 + 2」の評価(7)を表示
    }
}

p.81 算術演算子(+,-,*,/)

・2項+演算子:2項が共に数値型であれば加算結果を返す。どちらかでも文字列ならば連結結果を返す
・2項-演算子:2項が共に数値型であれば左辺から右辺を引いた結果を返す。
・2項*演算子:2項が共に数値型であれば左辺と右辺の積を返す。
・2項/演算子:2項が共に整数型であれば左辺を右辺で割った商の整数部を返す(小数点以下切り捨て)。どちらかでも実数型ならば商を返す。
 ※ 右辺の値が0だと実行時エラー、右辺が「0」だと文法エラーになる
 ※ 右辺が0.0だと∞、-0.0だと-∞になる。

アレンジ演習:p.81 add01.cs

・下記の組み合わせを、2項+演算子に渡すと、どうなるか確認しよう。可能な場合、結果の型はどうなるか確認しよう。
①整数リテラルと文字リテラル
②文字リテラルと文字列リテラル
③整数リテラルと論理値リテラル
・エラーになったら、コメントアウトすること

作成例

//アレンジ演習:p.81 add01.cs
using System;
class add01
{
    public static void Main()
    {
        Console.WriteLine(3 + 6); //加算され9
        Console.WriteLine(3.0 + 6); //加算され9.0だが表示は9になる
        Console.WriteLine("3.5" + 6); //6が文字列に変換されて結合され3.56
        Console.WriteLine(3.5 + "6"); //3.5が文字列に変換されて結合され3.56
        Console.WriteLine(); //改行
        Console.WriteLine("(3.0 + 6)の型は{0}",(3.0 + 6).GetType()); //double = System.Double
        Console.WriteLine("文字列3.5 + intの6の型は{0}",("3.5" + 6).GetType()); //string = System.String
        Console.WriteLine("doubleの3.5 + 文字列6の型は{0}", (3.5 + "6").GetType()); //同上
        //【以下追加】
        Console.WriteLine("整数リテラル + 文字リテラルの型は{0}", (5 + 'A').GetType()); //int = System.Int32
        Console.WriteLine("5 + 'A' は {0}", 5 + 'A'); //70(文字'A'の文字コード65を加算
        Console.WriteLine("文字リテラル + 文字列リテラルの型は{0}", ('A' + "BC").GetType());//string = System.String
        Console.WriteLine("'A' + \"BC\" は {0}", 'A' + "BC"); //"ABC"('A'が文字列"A"に変換されて結合
        // Console.WriteLine("整数リテラルと論理値リテラルの型は{0}", (5 + true).GetType());//エラー
    }
}

p.82(型が異なる整数型と実数型による算術演算のルール)

① どちらがdoubleであれば、両方をdoubleに変換して計算
② ではなくて、どちらがfloatであれば、両方をfloatに変換して計算
③ ではなければどちらも整数なので、ulong、long、uint、intの順にあてはめて変換して計算
※ decimal型は実数変換できないので、対象外。

アレンジ演習:p.83 division01.cs

・下記の組み合わせを、2項/演算子に渡すと、どうなるか確認しよう。可能な場合、結果の型はどうなるか確認しよう。
①整数リテラル / 0
②整数リテラル / 値が0である変数
③整数リテラル / 0.0
④整数リテラル / -0.0
⑤実数リテラル / 0
⑥実数リテラル / 値が0である変数
⑦実数リテラル / 0.0
⑧実数リテラル / -0.0
・エラーになったら、コメントアウトすること

作成例

//p.83 division01.cs
using System;
class division01
{
    public static void Main()
    {
        Console.WriteLine("10 / 3 = {0}", 10 / 3); //3(小数点以下切り捨て)
        Console.WriteLine("(10 / 3)の型は{0}", (10 / 3).GetType()); //int(System.Int32)
        Console.WriteLine("10 / 3.0 = {0}", 10 / 3.0); //3.333333333333333
        Console.WriteLine("(10 / 3.0)の型は{0}", (10 / 3.0).GetType()); //double(System.Double)
        //【以下追加】
        // Console.WriteLine("10 / 0 = {0}", 10 / 0); //文法エラー
        int w = 0; //値が0である整数型変数
        // Console.WriteLine("10 / w = {0}", 10 / w); //実行時エラー「0 で除算しようとしました」
        Console.WriteLine("10 /  0.0 = {0}", 10 / 0.0); //∞
        Console.WriteLine("(10 /  0.0)の型は{0}", (10 / 0.0).GetType()); //double(System.Double)
        Console.WriteLine("10 / -0.0 = {0}", 10 / -0.0); //-∞
        Console.WriteLine("(10 / -0.0)の型は{0}", (10 / 0.0).GetType()); //double(System.Double)
        Console.WriteLine("10.0 /  0 = {0}", 10 / 0.0); //∞
        Console.WriteLine("(10 /  0.0)の型は{0}", (10 / 0.0).GetType()); //double(System.Double)
        Console.WriteLine("10.0 /  w = {0}", 10.0 / w); //∞
        Console.WriteLine("(10.0 /  w)の型は{0}", (10.0 / w).GetType()); //double(System.Double)
        Console.WriteLine("10.0 / 0.0 = {0}", 10.0 / 0.0); //∞
        Console.WriteLine("(10.0 / 0.0)の型は{0}", (10.0 / 0.0).GetType()); //double(System.Double)
        Console.WriteLine("10.0 / -0.0 = {0}", 10.0 / -0.0); //-∞
        Console.WriteLine("(10.0 / -0.0)の型は{0}", (10.0 / -0.0).GetType()); //double(System.Double)
    }
}

p.84 剰余演算子

・2項%演算子:2項が共に数値型であれば左辺を右辺で割った余りを返す(パーセンテージではない)
 例: 9 % 2 ⇒ 1 (9÷2=4あまり1だから)
 例: 1 % 0.3 ⇒ 0.1 (1÷0.3=3あまり0.1だから)
a・なお、負の数の場合、C#のルールにしたがって計算されるので注意
 ⇒ 双方を正の数にして剰余を得てから、左辺の符号を付けている
  Console.WriteLine(" 10 % -3 = {0}",  10 % -3); // 10÷-3=-3余り 1となる
  Console.WriteLine("-10 %  3 = {0}", -10 %  3); //-10÷ 3=-3余り-1となる
  Console.WriteLine("-10 % -3 = {0}", -10 % -3); //-10÷-3= 3余り-1となる
・補足:負の数の剰余算を推奨しない場合もある

アレンジ演習:p.84 mod01.cs

・下記の組み合わせを、2項/演算子に渡すと、どうなるか確認しよう。可能な場合、結果の型はどうなるか確認しよう。
①整数リテラル % 0
②整数リテラル % 値が0である変数
③整数リテラル % 0.0
④整数リテラル % 0.0以外の実数リテラル

作成例

//p.84 mod01.cs
using System;
class mod01
{
    public static void Main()
    {
        Console.WriteLine("10 % 3 = {0}", 10 % 3); //1(10÷3は3余り1なので)
        Console.WriteLine("13.53 % 2 = {0}", 13.53 % 2); //1.53(13.53÷2は6余り1.53なので)
        Console.WriteLine("13.53 % 2.5 = {0}", 13.53 % 2.5); //1.03(13.53÷2.5は5余り1.03なので)
        //【以下追加】
        //Console.WriteLine("10 % 3 = {0}", 10 % 0); //文法エラー
        int w = 0;
        //Console.WriteLine("10 % w = {0}", 10 % w); //実行時エラー「0 で除算しようとしました」
        Console.WriteLine("10 % 0.0 = {0}", 10 % 0.0); //NaN(非数)
        Console.WriteLine("(10 % 0.0)の型は{0}", (10 % 0.0).GetType()); //double(System.Double)
        Console.WriteLine("10 % 0.3 = {0}", 10 % 0.3); //0.1(10÷0.3は3余り0.1なので)
        Console.WriteLine("(10 % 0.3)の型は{0}", (10 % 0.3).GetType()); //double(System.Double)
    }
}