ちょっと発展的な演算子

少し前にQiitaにあげていた記事です。

複合代入演算子

複合代入演算子とは、変数自信に対する演算と代入を組み合わせたもの。
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桁シフトする

let v:UInt8 = 0b00000101
let v2 = v<<1
print(v,v2)

///5,10

2. ビット積、ビット和

こちらは、二進数のaとbの数値を書く桁のビットことに比較して演算するというものです。

a&b  :  両方の桁が1ならば1
a|b  :  どちらかの桁が1ならば1

こちらは今後もう少し深く掘っていこうかなと思います。

それでは。

コメント

タイトルとURLをコピーしました