设为首页 加入收藏

TOP

窥探Swift之需要注意的基本运算符和高级运算符(二)
2017-10-10 12:18:38 】 浏览:1750
Tags:窥探 Swift 需要 注意 基本 运算 符和 高级
位或就是对二进制中的每一位进行或操作,所以叫按位或。运算规则为 1 | 1 = 1, 1 | 0 = 1,  0 | 1 = 1, 0 | 0 = 0。按位或常用来把指定位置的数值置为1。下方是实例是要把0000_0011的前四位置为1,后四位不变,所以要与1111_0000进行按位或操作。

    按位或操作的原理图如下:

 

    (3) 按位异或(^)

    异或的运算法则也是比较容易理解的, 简单一句话就是相同为0,不同为1。 1 ^ 1 = 0,  1 ^ 0 = 1,  0 ^ 1 = 1,  0 ^ 0 = 0。有异或的运算规则我们容易得出0 异或任何一个数,还等于这个数的本身。1 异或任何一个数等于这个数取反。下方是一个实例:

    上面代码的原理图如下:

    异或的用法是比较多的,我们可以使用异或运算在不创建临时变量时来交换两个数的值。具体如下:

    我们还可以使用异或运算来判断两个值是否相等,如果两个数异或后的值为0,那么两个数就相等,具体代码如下所示:

1 if swap1 ^ swap2 == 0 {
2     print("swap1 == swap2")
3 }

 

    (4) 按位取反(~)

      一个数值与1进行异或,都会得到其相反的值,也就是取反。我们还可以通过按位取反运算符来对值进行取反,取反的规则就比较简单了,就是0变成1,1变成0。下方是取反运算的实例,在Playground中可以看出其取反后的值。按位取反的实例如下(下面只讨论的正数的取反,关于负数的取反没有):

 

    (5) 按位左移(<<)和按位右移(>>)操作

      正数的左右位移用0来填补空位,而负数左移用0来填补,右移用符号位来填补。实例如下:

 

 

 

 

  2.溢出运算符

    在Swift语言中,如果值溢出,是会报错的。这也能反映出Swift安全性,如果你想在值溢出时对有效位进行截断的话,那么你就可以使用溢出运算符。

    值上溢出运算符(&+), 关于值上溢运算符,就不说多少废话了,直接上实例。在Playground中取出UInt8类型的上限,然后对其加1,让其溢出。如果你直接使用+号的话,会给出一个错误。使用&+就不一样了,效果如下。值的下溢运算符(&-, &*)的用法和&+类似,在此就不做赘述了。(&/与&%)在Xcode7中未编译通过,提示找不到此标示符。

 

 

 

  3. 运算符重载

    在Swift2.0中运算符重载是比较容易实现的,就是把函数名换成你要重载的运算符即可。下方就通过一个小实例来看一下Swift中的运算符重载。在Swift中是+号运算符是不支持元组直接相加的,如果你直接对元组进行加法操作,会报下面的错误。

    (1)对中缀运算符重载,如果对+运算符进行重载,那么+运算符将会支持元组相加, 具体代码和运行结果如下所示,+运算符原来的功能还是不变的。

    (2)对前缀运算符进行重载,就以-运算符为例。对前缀运算符重载在func前面要加上prefix修饰符。如果要对后缀运算符进行重载的话,要使用postfix进行修饰,下方是对-进行前缀运算符重载。具体代码如下:

 1 //前缀运算符重载
 2 struct Point {
 3     var x = 0.0, y = 0.0
 4 }
 5 
 6 prefix func - (point: Point) -> Point {
 7     return Point(x: -point.x, y: -point.y)
 8 }
 9 let positive = Point(x: 3.0, y: 4.0)
10 let negative = -positive

    结果输出如下:

    (3) 自定义运算符:在Swift中支持定义属于你自己的运算符,在定义运算符时,先使用operator 声明一下所指定的标示符,并且指定一下是前缀还是后缀等,具体的就看下面的代码即可:

//自定义运算符
//1、先声明自定义的运算符
prefix operator +++ {}

//2.进行实现
prefix func +++ (point:Point) -> Point{
    return Point(x:point.x + 1, y:point.y + 1);
}

let aaa = Point(x: 1.0, y:2.0);
let add = +++aaa;
print(add)     // Point(x: 2.0, y: 3.0)

   

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇swift写ios mvc的小demo 下一篇Swift网络开发之NSURLSession学习..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目