三.溢出运算符

   1. 默认情况下,Swift不允许整型变量被赋予一个超出表示范围的数,否则会报错。

   

   2. Swift中,如果希望数据溢出时Swift程序只是对溢出的数据进行截断,而不是报错,则可以使用Swift提供的溢出运算符。

   

   3. Swift为 整型 计算提供了5个以&开头的溢出运算符。

      &+:溢出加

      &-:溢出减

      &*:溢出乘

      &/:溢出除

      &%:溢出求余

      举个栗子:

      var a : Int16 = 65535;

      a = a * 10;  //此时,程序不会报错,运行的结果将会把左边溢出的部分抛弃

      

      

   4. 值的上溢:超出的类型表示的最大范围,即真实值的左边被截断抛弃了。

   5. 值的下溢:超出了类型表示的最小防伪,即真实值的右边被截断抛弃了。

   

   6. 除零溢出,举个栗子:

   let x = 20

   let y = x / 0     //报错

   let z = x % 0     //报错

   如果写为:

   let y = x &/ 0;    //不会报错,得到0

   let z = x &% 0;    //不会报错,得到0

   

   

   四.位运算符

   1.位运算符通常在图形、图像处理和创建设备驱动等底层开发中使用的比较多。使用位运算符可以直接操作数据的原始

   bit位。尤其是在使用自定义的协议进行通信时,使用位运算对原始数据进行编码和解码也非常有效。

   

   2. 同其他的编程语言,Swift中的位运算符有6个:

      &:按位与

      |:按位或

      ^:按位异或

      ~:按位取反

      <<:左位移运算

      >>:右位移运算

      

   五.扩展后的赋值运算符

   +=, -=, *=,/=, %=, &=, |=, ^=, <<=, >>=

   

   六.范围运算符

   1. Swift提供了两个范围运算符,他们可以非常方便地构建一种数据结构,这种数据结构包含了特定范围内的所有值。

   

   2. 闭范围运算符:ā...b用于定义一个从a~b(包括a、b边界值)的所有值的范围。并且对于闭范围运算符而言,a不能

   大于b

   

   3. 半开范围运算符:a..<b用于定义一个从a~b(包括a,但是不包括b)的所有值的范围。同样的,a不能大于b。

   

   4. 使用for-in遍历的例子:

var rangle = 2...6
   for num in rangle 
   {
   print(num)
   }
   
   var books = ["abc", "123", "def", "456"]
   for index in 0..<books.count
   {
   print("第(\index+1)本书是:(\books[index])")
   }

   可以看出,使用半开范围运算符对遍历数组很方便。

   

   

   七.比较运算符

   >, >=, <, <=, ==, !=, ===, !==

   其中:

   ===:恒等于,该运算符通常只用于判断引用类型的变量,只有当两个引用变量都引用了同一个对象时才返回true,

   否则返回false。

   !==:不恒等于,同===的作用相同,只是返回值恰好相反。

   

   八.逻辑运算符:

  &&, ||,!, &, |, ^

 

   九.三目运算符 ——?:

   

   十. nil合并运算符

   1. Swift提供了nil合并运算符:??,用法位:a ?? b;

   

   2. 功能是判断可选类型变量a是否为nil,如果a不为nil,程序将会返回可选类型a所包含的实际值;如果a为nil,则会返回默认值b。

   

   3. 使用该运算符时要求b和a所包含的类型一致。比如a是Int?,那么b就是Int类型,如果a是String?,那么b就是String类型。

   

   4,如果??的左操作数不为nil,那么??右边的操作不会被计算,也就是说??是短路运算符。

   

   5. ??运算符的左操作数可以不是可选类型的,但是这样的话,使用??就没有意义了。