每天学一点Swift----运算符与表达式(二)

来源:互联网 发布:原味丝袜淘宝卖家 编辑:程序博客网 时间:2024/05/21 00:45

.溢出运算符

   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用于定义一个从ab(包括ab边界值)的所有值的范围。并且对于闭范围运算符而言,a不能

   大于b

   

   3. 半开范围运算符:a..<b用于定义一个从ab(包括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所包含的实际值;如果anil,则会返回默认值b

   

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

   

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

   

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


上一篇:每天学一点Swift----运算符与表达式(一)

下一篇:每天学一点Swift----流程控制

0 0