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