【Swift】演算子の使い方(Swift 2.1、XCode 7.2)
演算子の種類
演算子とは、計算するときに使う記号のことである。1+2=3の「+」を「プラス演算子」、「=」を「イコール演算子」と言ったりする。
Swiftの演算子は、他の言語で慣れ親しんでいる演算子と意味や使い方が同じものがほとんどである。主要な演算子と使用例をまとめておこう。
型名 | 説明 | |
---|---|---|
1 | + | 加算する |
2 | - | 減算する |
3 | / | 割る |
4 | * | 掛ける |
5 | % | 数値を割った余り |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//数値を加算 print(1 + 1) //2 //数値を減算 print(2 - 1) //1 //数値を割る print(4 / 2) //2 //数値を掛ける print(3 * 2) //6 //数値を割った余り print(5 % 2) //1 |
下表のように、変数の値をインクリメント(1加算)、デクリメント(1減算)する演算子がある。演算子を変数の右に書くか、左に書くかで挙動が変わるので注意が必要だ。
型名 | 説明 | |
---|---|---|
1 | ++ | 数値をインクリメントする。 |
2 | – | 数値をデクリメントする。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// インクリメント // 変数の右に++演算子を書いた場合は、代入が終わったあとにインクリメント var a = 2 var b = a++ print(b) //実行結果 2 // インクリメント // 変数の左に++演算子を書いた場合は、代入する前にインクリメント var c = 2 var d = ++c print(d) //実行結果 3 |
論理積や論理和を計算する演算子もある。
型名 | 説明 | |
---|---|---|
6 | && | 論理積(左右両方ともtrueの場合のみtrue) |
7 | || | 論理和(どちらか一方がtrueならtrue) |
8 | & | ビット積 |
9 | | | ビット和 |
10 | ^ | 排他的ビット和 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// 論理積 var a = true, b = false print(a && b) //実行結果 false // 論理和 var c = true, d = false print(c || d) //実行結果 ture // AND var e = 3, f = 1 print(e & f) //実行結果 1 // OR var g = 3, h = 1 print(e | f) //実行結果 3 // XOR var i = 3, j = 1 print(i ^ j) //実行結果 2 |
参考までにビット積について簡単に説明しておく。例えば10進数の3を2進数に変換すると「11」。10進数の「1」を2進数に変換すると「01」。この2つを上下に並べると以下になる。
11
01
ビット積の場合は、同じ桁が両方とも1の場合のみ1、それ以外は0を下に書いていく。
11
01
===
01
導き出された「01」を10進数に変換すると「1」で、これが答えになる。
これから、ビット演算をたくさん使うことはないだろうが、ビットをシフトさせて値を変化させる演算子もある。
型名 | 説明 | |
---|---|---|
1 | << | ビットを左にシフト |
2 | >> | ビットを右にシフト |
1 2 3 4 5 6 |
// <<演算子 print(2 << 1) //結果 4 // >>演算子 print(5 >> 1) //結果 2 |
上記コードの動きを簡単に説明しておくと、「2 << 1 」は「2を1桁左にシフトせよ」ということを表している。
10進数の「2」を2進数に変換すると「10」。これを左に1桁ずらす(=右に0を追加して全体的に左に流す)と「100」になる。「100」を10進数に変換すると「4」。これが答えとなる。
以下の演算子は、上記で説明した演算子を利用して、右辺と左辺で計算した結果を左辺の変数に代入する演算子である。
型名 | 説明 | |
---|---|---|
1 | = | 右辺の値を左辺の変数に代入する。 |
2 | += | 左辺と右辺を加算した値を左辺の変数に代入する。 |
3 | -= | 左辺から右辺を減算した値を左辺の変数に代入する。 |
4 | *= | 左辺と右辺を掛けた値を左辺の変数に代入する。 |
5 | /= | 左辺を右辺で割った値を左辺の変数に代入する。 |
6 | %= | 左辺を右辺で割った余りを左辺の変数に代入する。 |
7 | /= | 左辺を右辺で割った余りを左辺の変数に代入する。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// =演算子 var a = 5, b = 2 a = b print(a) //実行結果 2 // +=演算子 var c = 5, d = 2 c += d print(c) //実行結果 7 // -=演算子 var e = 5, f = 2 e -= f print(e) //実行結果 3 // *=演算子 var g = 5, h = 2 g *= h print(g) //実行結果 10 // /=演算子 var i = 5, j = 2 i /= j print(i) //実行結果 2 // %=演算子 var k = 5, l = 2 k %= l print(k) //実行結果 1 |
型名 | 説明 | |
---|---|---|
1 | &= | 左辺と右辺の論理積(AND)の結果を左辺の変数に代入する。 |
2 | ^= | 左辺と右辺の排他的論理和(XOR)の結果を左辺の変数に代入する。 |
3 | |= | 左辺と右辺の論理和(OR)の結果を左辺の変数に代入する。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// AND var e = 3, f = 1 e &= f print(e) //実行結果 1 // OR var g = 3, h = 1 g |= h print(g) //実行結果 3 // XOR var i = 3, j = 1 i ^= j print(i) //実行結果 2 |
下表の演算子は、左辺と右辺の値を比較して、演算子の条件を満たす場合はtrue、満たさない場合はfalseを返す。
型名 | 説明 | |
---|---|---|
1 | == | 等しい |
1 | === | オブジェクトが同じ |
2 | != | 等しくない |
2 | !== | オブジェクトが異なる |
3 | >= | 左辺は右辺以上 |
4 | <= | 左辺は右辺以下 |
5 | > | 左辺は右辺よりも大きい |
6 | < | 左辺は右辺よりも小さい |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// ==演算子 var a = 3, b = 3 print(a == b) //結果 true // !=演算子 var c = 3, d = 3 print(c != d) //結果 false // >=演算子 var e = 5, f = 3 print(e >= f) //結果 true // <=演算子 var g = 5, h = 3 print(g <= h) //結果 false // >演算子 var i = 3, j = 3 print(i > j) //結果 false // <演算子 var k = 1, m = 3 print(k < m) //結果 true |