今日は少し発展した演算子の学び直し。
複合代入演算子
複合代入演算子とは、変数自信に対する演算と代入を組み合わせたもの。
aを足した値をそのままaに代入する、というあれです。
よく使います。
var a = 1
var b = 3
a += 1
b *= 2
print(a + b)
// 8
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に代入する
三項演算子
三項演算子は、条件によって式を変更できる便利なものです。こちらもよく現場で使います。
条件式 ? trueの場合の式 : falseの場合の式
if文を一行にした式、というイメージですかね。
例
let a = 300
let b = 200
let c = a>b ? "true" : "false"
print(c)
// "true"
レンジ演算子
レンジ演算子とは、数値の範囲を指定できる演算子です。
(最後の値を含める場合)
開始値 ..< 終了値
(最後の値を含めない場合)
開始値 ... 終了値
また、レンジ演算子で数値の範囲を作った時、その中に任意の数値が含められているかどうかを判断するときは contains() でチェックできます。
例
let age = 6...12
print(age.contains(4))
print(age.contains(11))
//false
//true
ビット演算子
ビット演算子を理解するのは少々難しいかもしれませんが、これは仕事でもビットフラグを読み込むのに使用しています。
結構大事なので、押さえておきましょう。
1. ビットシフト
ビットシフトは、数値を二進数で表現した時に、指定した方向に桁をシフトする演算です。
a<<b : aを左へb桁シフトする
a>>b : aを右へb桁シフトする
例
let v:UInt8 = 0b00000101
let v2 = v<<1
print(v,v2)
///5,10
2. ビット積、ビット和
こちらは、二進数のaとbの数値を書く桁のビットことに比較して演算するというものです。
a&b : 両方の桁が1ならば1
a|b : どちらかの桁が1ならば1
こちらは今後もう少し深く掘っていこうかなと思います。
それでは。