Swift 06 演算子と表現式

# 6-1 Swift表現式 syntax
>  operate: (of a person) control the functioning of (a machine, process, or system).
   origin : Latin operat- ‘done by labour’, from the verb operari, from opus, oper- ‘work’.

> operand : the quantity on which an operation is to be done.
  origin : from Latin operandum, neuter gerundive of operari ‘expend labour on

Swiftは　Operator(+,-,/ ...), operand(1, 2 ...) , assignment(var result ...)で構成である。
これらを集めてExpressionの方で作業する事です。

# 6-2 基本割り当て演算子

# 6-3 算術演算子
binary operator >> x = x - 5
unary negative operator
は例外的に一つの被演算子を受けます。これは二つのオペランドを受けるSubtraction operatorと対照的です。
```swift
var x = -10 
x = x - 5
```
# 6-4 complex assignment operator
```swift
x = x + y
x += y
```
# 6-5 Comparison operator
x != y
# 6-6 Boolean logic operator 
NOT(!)
```swift
var flag = true  // flagはtrueです
var secondFlag =　!flag　//　secondFlagにはfalseが貯蔵される
```
OR(||), AND(&&)
```swift
if (10 < 20) || (20 < 10) {
...}
if (10< 20) && (20 < 10) {
...}
```
## 6-7 range operator
### Closed range operator
```swift
x...y 
```
例えば　5...8 
> 5,6,7,8
### half-open range operator
```swift
x..<y
```
例えば　5..<8
> 5,6,7
### one-sided range operator
```swift
x...
...y
```
例えば、以前の章で Stringは実はGramphm Clusterの方でなっていることを確認して、
2... は　３番の文字から最後の文字まで範囲を指定する。
\u{0002 ... } 
## 6-8 ternary operator
> ternary : from Latin ternarius, from terni ‘three at once’.

Codeの内部で判断を簡単にするためにternary operatorをサポートする。
```swift
print("Largest number is \(x > y ? x: y)")
```
## 6-9 nil coalescing operator (併合 演算子)
> coalesce:  from Latin coalescere ‘grow together’, from co- (from cum ‘with’) + alescere ‘grow up’ 

nil coalescing operator(??)を使えば、オショナルでnilの値がある場合に、デフォルト値を使う事が出来ます。

```swift
let customerName: String? = nil
print("Welcom back, \(customerName ?? "customer")")
>> customer
```
反面、CustumerNameの変数の値がnilではなければ、これはアンラプンクされて割り当てた値がひょうしさせる。
```swift
let customerName: String? = "John"
print("Welcom back, \(customerName ?? "customer")")
>> John
```
### 6-10 bit operator (ビット演算子)
十進数172は二進数で
```swift
10101011
```
十進数3は二進数で

```swift
00000011
```
Swiftではbit operatorを提供します。

### NOT Bit Operator
> NOTはティルド文字「~」で表現されて、

数字の全てのビットを逆で作ります。
```swift

let y = 3 (000000011)
let z = ~y ; print("Result is \(z)")
    >> -4 (111111100)
```
### AND Bit Operator
```swift
let y = 171 (10101011)
let z = 3   (00000011) ; let z = x & y ; print("Result is \(z)")
        >>3 (00000011)
```

### OR Bit Operator
```swift
let y = 171 (10101011)
let z = 3   (00000011); let z = x | y ; print("Result is \(z)")
      >>171 (10101011)
```
### XOR Bit Operator
一般的に「ベータ的論理和」と呼ばれるXORは　カラット「^」文字で表現されて、OR演算と似たような作業をします。ただ、二つのビットのうち、一つだけが'1'の場合に結果が1でなる事です。
> Caret : a mark (‸, ⁁) placed below the line to indicate a proposed insertion in a text. 
Origin : from Latin, ‘is lacking’

### OR Bit Operator
```swift
let y = 171 (10101011)
let z = 3   (00000011); let z = x ^ y ; print("Result is \(z)")
      >>168 (10101000)
```
### Left shift bit operator 「左シフト演算子」
左シフト演算子は二進数の各ビットを指定された回数だけ左に移動させます。
それは本来の値の二倍になります。
一番右の空席には0で埋めます。また、一番左のビットが左に移動する後の結果値が、その値を収める変数の大きさをこえると、その値は無視されて捨てられます。
```swift
10101011
========
101010110
```
スニフとで左シフト演算子は「<<」で表現されて、その後にはどのぐらい移動するかの数字を表示する。
```swift
let x = 171   //10101011  - 171
let z = x << 1
print(z)      //101010110 - 342
```
### Right shift bit operator 「右シフト演算子」
左シフト演算子似たような方法で右端にあるbitは廃棄される。
最上位ビットの座に1を置くかは正の数または負の数を指すことに使用されるsign bit(符号ビット)が設定されるかどうかによって決められます。
```swift
let x = 171   //10101011  - 171
let z = x >> 1
print(z)      //01010101  - 85  
```
## 6-11 compound bit operator 「複合ビット演算子」
arithmetic operatorとしてbit operatorはビット演算した後でその値を振り合う演算子をもっています。
|　　　　　　演算子 　　　　　| 　　　　　　　　　　　説明 　　　　　　　　　　　|
|:-:|:-:|
| x &= y   | xとyの　AND　ビット演算をして、その結果を「x」に振り合う | 
| x \|= y  | xとyの　OR　ビット演算をして、その結果を「x」に振り合う |
| x &= y   | xとyの　XOR　ビット演算をして、その結果を「x」に振り合う | 
| x <<= y  | xをn番左シフトビット演算をして、その結果を「x」に振り合う  |
| x >>= y  | xをn番右シフトビット演算をして、その結果を「x」に振り合う  | 

## 6-12 要約
演算子と表現式はスイフトのないで変数と常数を変更するし判断する基本マカニーズムを提供します。
一番簡単な方では`足し算演算子`を利用して2つの数字を加えて割り当て演算子を利用してその結果を`変数に保存すること`です。