講義メモ

・第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)
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です