第3回 1.演算子

  • =
初回のサンプルで既に使っていたりするので、今更感がありますが、代入と呼ばれてい
る演算子が、このイコールです。

int i;
i = 100;

変数iに100を代入しています。
ま、イコールに関してはそれほど説明をすることも無いでしょう。

  • +-/*
所謂四則演算というやつです。
  1. (たす)、-(ひく)、*(かける)、/(わる)です。
……って、小学校じゃないんだから、加算、減算、乗算、除算ですか。
ま、分かりやすいほうで。
除算は商だけを取得できます。剰余(あまり)を得るには、%を使います。

int i;
i = 10 + 10; //iは20
i = i  - 10; //iは10
i = i  * 10; //iは100
i = 10 / 3;  //iは3
i = 10 % 3;  //iは1(10/3のあまりをiに代入)

演算の順番は通常の四則演算と同じです。
順番を変えたい場合、括弧を使用するのも同じです。

int i = ( 1 + 3 ) * 3;

iには10ではなく、12が代入されます。
当たり前ですが。

  • &^|
&(and)、^(xor)、|(or)です。
論理演算というやつです。

論理演算というのは、0と1の組み合わせで行う演算です。
andは両方1ならば1、orはどちらか片方でも1ならば1、xorは、片方1だけならば1を返
します。それ以外は0を返します。

以下が論理演算の組み合わせになります。
and
0 & 0 : 0
0 & 1 : 0
1 & 0 : 0
1 & 1 : 0

or
0 | 0 : 0
0 | 1 : 1
1 | 0 : 1
1 | 1 : 1

xor
0 ^ 0 : 0
0 ^ 1 : 1
1 ^ 0 : 1
1 ^ 1 : 0

C#では……というか、プログラム言語では、これらを各ビットごとに行います。
int i = 0xffff;
i = i & 0xff00;

例では、iにはff00が代入されます。
これは、二進数に直して計算すると分かりやすいです。
  1111 1111 1111 1111
 &
  1111 1111 0000 0000
 =
  1111 1111 0000 0000

andは特定のビットが立っているか(1か)を確認するとき、または特定のビットを落とす
とき(0)orは特定のビットを立てるとき、xorは特定のビットを反転させるときに良く使
われます。

int i = 0xf0;

if( i & 0x80 != 0 ) //iの15bit目が1かを調べる
{
    i = i & 0x7f;   //iの15bit目を0にする(=0x70)
}

i = i | 0x80;       //iの15bit目を1にする(=0xf0)
i = i ^ 0xff;       //iの0-15bit目を反転させる(=0x0f)

ま、C/C++をやったことがあるならば、改めて説明するまでもありませんが、初めてプ
ログラムを組んでみる人は、しっかりと覚えてください。
結構重要です。
と、例中のif~は、また後で説明しますが、条件分岐と呼ばれる処理です。

  • 演算子のショートカット
変数に、その変数との演算結果を代入する場合は、i = i + 1のように、変数自身に代
入するような記述をしてきました。
分かりやすくて良いのですが、面倒だという人の為に(?)ショートカットが用意され
ています。
ショートカットを使う際は、演算子の後ろにイコールをつけます。例えば、+=のように
です。

int i = 0;
i += 10;
i -= 1;
i *= 10;
i /= 5;
i &= 0xf;
i |= 0xf0;
i ^= 0xff;

iはいくつになっているでしょうか。
計算してみてくださいな。

さらにものぐさな人の為に、++と--という、1だけインクリメント、デクリメントする
というショートカットも用意されています。

    1. と--は、変数の前又は後ろにつけることが出来ます。それぞれ前置演算子、後置演算
子と呼びます。
前につけると、インクリメントを行ってから変数を解釈します。
後ろにつけると、変数を解釈してからインクリメントします。

例 int x = 0, y = 0;
x = y++;  //まず、yが解釈され、xに代入。その後、yがインクリメント。
          //つまり、x = 0,y = 1;
y = 0;
x = ++y;  //まず、yがインクリメントされる。その後、xに代入。
          //つまり、x = 1,y = 1;

例を見ても分かるとおり、変数をインクリメントするだけなら、前につけても後ろにつ
けても特に変わりはありません。

  • 関係演算子
関係演算子、というのは、式を評価して、結果をブール値で取得する演算子です。
と、まぁ、難しく書くと(?)こうなりますが、要は式を比較して、その結果が正しい
か、正しくないかを得る演算子です。

記号 意味
== 等しい
!= 等しくない
大きい
< 小さい
>= 同じか、大きい
<= 同じか、小さい

たとえば、aとbが同じか同かを調べたい場合は、a == bとなります。
代入に使われる=と、関係演算子の==は全く別物なので注意してください。
結果はbool型の変数に格納できます。
というより、bool型の変数にしか格納できません。

bool b;
b = x == y;
label1.Text = b.ToString();

この例では、bにxとyが同じかどうかの結果を代入し、その結果を表示しています。
このようなbool型の変数に比較結果を代入する、というケースはそれほど多くは無いと
思います(そういう記述が好きだという人も居るかもしれませんが)
後ほど説明する条件分岐に、この関係演算子は良く用いられます。

  • 論理条件演算子
条件が複数ある場合、論理条件演算子を使用します。
たとえば、「作品に登場する人物は18歳以上です」等という場合は単純に関係演算子
を使えば良いのですが(作品の舞台が高等学校だったとしても)、「求人 18歳から
30歳まで」なんて場合は論理条件演算子を使う必要があります。

記号 意味
&& and(且つ)
|| or(または)
! not(否定)
orは、全角になっていますが、プログラミングするときは半角です

たとえば、求人の例をとって、18~30迄という条件ならば、以下のようになります。

bool b;
b = ( age >= 18 ) && ( age <= 30 );

bにはageが18以上30以下ならtrue、それ以外ならfalseが返されます。
最終更新:2007年09月22日 13:11
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。