p.88 関係演算子
・2項の大小関係を論理型(p.57)で返す演算子群で、trueまたはfalseを返す ・「==」「!=」「>=」「<=」は間にスペースが入るとエラーなので注意 ・「!=」「>=」「<=」はイコールが前にくるとエラーなので注意
ミニ演習 mini088a.cs
・int i = 3 と double d = 3.0 が2項==演算子で比較できるかどうか、出来る場合はその結果を表示しよう ・decimal m = 3M と double d = 3.0 が2項!=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ⇒ できない ・decimal m = 3M と int i = 3 が2項<=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ・bool t = true と bool f = false が2項!=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ・bool t = true と bool f = false が2項<=演算子で比較できるかどうか、出来る場合はその結果を表示しよう ⇒ できない
作成例
//ミニ演習 mini088a.cs
using System;
class increment02
{
public static void Main()
{
int i = 3;
double d = 3.0;
Console.WriteLine("i == d :{0}", i == d); //Trueになる
decimal m = 3M;
//Console.WriteLine("m != d :{0}", m != d); //doubleとdecimalの比較はできず、エラーになる
Console.WriteLine("m <= i :{0}", m <= i); //Trueになる
bool t = true, f = false;
Console.WriteLine("t != f :{0}", t != f); //Trueになる
//Console.WriteLine("t <= f :{0}", t <= f); //boolとboolの大小比較はできず、エラーになる
}
}
p.88 条件演算子
・C#では唯一の3項演算子で、分岐構造を表現できる演算子 ・構文は「● ? ■ : ▲」で●にはbool型の値または式を書き、これがTrueなら■を、Falseなら▲を返す 例:「(a > b) ? a : b」とすると、aとbの大きい方の値が得られる(等しい場合はb) 例:「(a < b) ? a : b」とすると、aとbの小さい方の値が得られる(等しい場合はb)
ミニ演習 mini088b.cs
・2つの実数値を入力して大きい方を表示しよう
作成例
//ミニ演習 mini088b.cs
using System;
class increment02
{
public static void Main()
{
Console.Write("実数1:"); double a = double.Parse(Console.ReadLine());
Console.Write("実数2:"); double b = double.Parse(Console.ReadLine());
Console.WriteLine("大きい方は{0}", (a > b) ? a : b);
}
}
ミニ演習 mini088c.cs
・2つの実数値を入力して差(大きい方-小さい方)を表示しよう
作成例
//ミニ演習 mini088c.cs
using System;
class increment02
{
public static void Main()
{
Console.Write("実数1:"); double a = double.Parse(Console.ReadLine());
Console.Write("実数2:"); double b = double.Parse(Console.ReadLine());
Console.WriteLine("差は{0}", (a > b) ? a - b : b - a);
}
}
p.88 条件演算子(つづき)
・条件演算子の第2、3項には式が書けるので、ここに条件演算子を記述することで多分岐構文を記述できる ・例: (a >= 80) ? "優" : ((a >= 60) ? "可" : "不可")); ・例: (a == b) ? ((a == c) ? "abcは等しい" : "等しくない")) : "等しくない"); ・例: (a != b) ? "等しくない" : ((a == c) ? "abcは等しい" : "等しくない"));
ミニ演習 mini088d.cs
・3つの実数値を入力して最大値を表示しよう ヒント ・a > b ならば、aとcの大きい方が最大値 ・a <= b ならば、bとcの大きい方が最大値 ⇒a > b ならば、aとcの大きい方が最大値、でなければ、bとcの大きい方が最大値
作成例
//ミニ演習 mini088d.cs
using System;
class increment02
{
public static void Main()
{
Console.Write("実数1:"); double a = double.Parse(Console.ReadLine());
Console.Write("実数2:"); double b = double.Parse(Console.ReadLine());
Console.Write("実数3:"); double c = double.Parse(Console.ReadLine());
Console.WriteLine("最大は{0}", (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c));
}
}
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」は実行されない=異常終了の回避が可能
提出:ミニ演習 mini088d.cs