比較演算子とは2つの値を比べるのに使用する演算子で、関係演算子とも呼ばれます。実際にどういうものがあるか見てみましょう。
演算子 | 意味 | 例 |
---|---|---|
== | イコール(等しい) | a == b(aとbは等しい) |
!= | ノットイコール(異なる) | a != b(aとbは等しくない) |
< | 小なり(より小さい) | a < b(aはbより小さい) |
<= | 小なりイコール(以下) | a <= b(aはb以下) |
> | 大なり(より大きい) | a > b(aはbより大きい) |
>= | 大なりイコール(以上) | a >= b(aはb以上) |
これも基本的に数学と一緒ですね。特に、数学でイコールを表す「=」はObjective-Cの世界では「右にある値を左にある変数に代入する」と話しましたが、数学におけるイコールをObjective-Cの世界では「==(イコール2つ)」で表します。比較演算子は2つの値を比較した結果、正しければ「1」、正しくなければ「0」を返します。
こちらも実際に書いて動かしてみましょう。
- (void)viewDidLoad { [super viewDidLoad]; // =(イコール) NSLog(@"1 == 1の演算結果は%d", 1 == 1); // コンソールに「1 == 1の演算結果は1」が表示される NSLog(@"1 == 2の演算結果は%d", 1 == 2); // コンソールに「1 == 2の演算結果は0」が表示される // !=(ノットイコール) NSLog(@"1 != 1の演算結果は%d", 1 != 1); // コンソールに「1 != 1の演算結果は0」が表示される NSLog(@"1 != 2の演算結果は%d", 1 != 2); // コンソールに「1 != 2の演算結果は1」が表示される // <(小なり) NSLog(@"2 < 3の演算結果は%d", 2 < 3); // コンソールに「2 < 3の演算結果は1」が表示される NSLog(@"3 < 2の演算結果は%d", 3 < 2); // コンソールに「3 < 2の演算結果は0」が表示される // <=(小なりイコール) NSLog(@"2 <= 3の演算結果は%d", 2 <= 3); // コンソールに「2 <= 3の演算結果は1」が表示される NSLog(@"3 <= 3の演算結果は%d", 3 <= 3); // コンソールに「3 <= 3の演算結果は1」が表示される NSLog(@"3 <= 2の演算結果は%d", 3 <= 2); // コンソールに「3 <= 2の演算結果は0」が表示される // >(大なり) NSLog(@"3 > 2の演算結果は%d", 3 > 2); // コンソールに「3 > 2の演算結果は1」が表示される NSLog(@"2 > 3の演算結果は%d", 2 > 3); // コンソールに「2 > 3の演算結果は0」が表示される // >=(大なりイコール) NSLog(@"3 >= 2の演算結果は%d", 3 >= 2); // コンソールに「3 >= 2の演算結果は1」が表示される NSLog(@"3 >= 3の演算結果は%d", 3 >= 3); // コンソールに「3 >= 3の演算結果は1」が表示される NSLog(@"2 >= 3の演算結果は%d", 2 >= 3); // コンソールに「2 >= 3の演算結果は0」が表示される }
比較演算子も算術演算子同様、変数同士や変数と数字に対しても演算できます。
NSLog(@"num1 == num2の演算結果は%d", num1 == num2); NSLog(@"num1 > 100の演算結果は%d", num1 > 100);
演算子は、算術演算子、比較演算子以外にも、たくさんあります。あまり使わないものもありますが、ここでは他の演算子の意味だけ紹介しておきます。これらの演算子は覚えておいて損はないので、こんなものがあるということだけでも頭に入れておいてください。
論理演算子は「NOT」「AND」「OR」などの論理演算を行うための演算子です。この演算子は評価結果として正しければ「1」、正しくなければ「0」を返します。
演算子 | 意味 | 例 |
---|---|---|
&& | 論理積(AND) | a && b(aかつb) |
|| | 論理和(OR) | a || b(aまたはb) |
! | 否定(NOT) | !a(aではない) |
ビット演算子はbit単位で演算するための演算子です。
演算子 | 意味 | 例 |
---|---|---|
& | ビット単位での論理積(AND) | a & b |
| | ビット単位での論理和(OR) | a | b |
^ | ビット単位での排他的論理和(XOR) | a ^ b |
~ | ビット単位での否定(NOT) | ~a |
<< | 左シフト | a << b(aをbビット左へシフト) |
>> | 右シフト | a >> b(aをbビット右へシフト) |
代入演算子は変数に対して値を代入するための演算子です。代表的なものは「=」ですが、実は「=」以外にもいくつか便利な演算子が用意されています。
演算子 | 意味 | 例 |
---|---|---|
= | 右辺を左辺に代入 | a = b |
+= | 右辺を左辺に加算後代入 | a += b(a = a + bと同じ) |
-= | 右辺を左辺から減算後代入 | a -= b(a = a - bと同じ) |
*= | 右辺を左辺に乗算後代入 | a *= b(a = a * bと同じ) |
/= | 右辺で左辺を除算後代入 | a /= b(a = a / bと同じ) |
%= | 右辺で左辺を剰余算後代入 | a %= b(a = a % bと同じ) |
&= | 左辺と右辺でビットごとに論理積演算した結果を代入 | a &= b(a = a & bと同じ) |
|= | 左辺と右辺でビットごとに論理和演算した結果を代入 | a |= b(a = a | bと同じ) |
^= | 左辺と右辺でビットごとに排他的論理和演算した結果を代入 | a ^= b(a = a ^ bと同じ) |
<<= | 左辺を右辺分左シフトした結果を代入 | a <<= b(a = a << bと同じ) |
>>= | 左辺を右辺分右シフトした結果を代入 | a >>= b(a = a >> bと同じ) |
ある値や変数に1加算(または減算)する場合はインクリメント/デクリメント演算子が使えます。
演算子 | 意味 | 例 |
---|---|---|
++ | インクリメント(1加算) | a++(後置演算)、++a(前置演算) |
-- | デクリメント(1減算) | a--(後置演算)、--a(前置演算) |
インクリメント/デクリメント演算子では後置演算、前置演算のどちらを使用するかで代入結果が違ってきますので注意してください。
int a, b; // 後置演算でインクリメント a = 1; b = a++; NSLog(@"%d", a); // コンソールに「2」が表示される NSLog(@"%d", b); // コンソールに「1」が表示される // 前置演算でインクリメント a = 1; b = ++a; NSLog(@"%d", a); // コンソールに「2」が表示される NSLog(@"%d", b); // コンソールに「2」が表示される
条件演算子は条件によって異なる値を返すことのできる「3項演算子」と呼ばれるものの1つです。書き方は以下のように書きます。
// 「a ? b : c」…条件式aが正しければb、正しくなければcを返す NSString *str = (a > 100) ? @"aは100より大きい" : @"aは100以下";
ここで演算子の優先順位にも触れておきましょう。例えば、数式であれば「a + b * c」とあった場合、先にbとcをかけて、その結果とaを足し合わせて結果を求めますよね。これは演算子に優先順位があり、優先順位の高いものから評価するという決まりがあるからです。
プログラムでも同じように演算子に優先順位があります。ですから、プログラムでも「a + b * c」は数式と同様に処理されます。先に「a + b」を処理したい場合は、これも数式と同様、「(a + b) * c」とします。
また、優先順位が同じだった場合は、演算子によって左から右に評価するか右から左に評価するかが決められています。これを「結合規則」といいます。
例えば、「a + b ? c」とあった場合、「+」と「-」は同じ優先順位なので結合規則に従い評価を行います。「+」と「-」は結合規則が左から右なので「+」から先に評価されます。
プログラムは書いた順番に処理されます。しかし、場合によっては状況によって処理を変えたりしたいこともありますよね。また、同じ処理を何回も行いたい場合に同じプログラムを何度も繰り返し書くのも非常に効率が悪くて嫌ですよね。
そこで、制御文の登場です。制御文とは文字通りプログラムの流れの制御する文です。難しそうに思うかもしれませんが、実は主に使用する制御文は「選択文」(「条件文」)「繰り返し文」「分岐文」の3種類しかありません。その内容も分かってしまえば非常に簡単ですので、安心して取り掛かってください。次ページから解説します。
Copyright © ITmedia, Inc. All Rights Reserved.