高级运算符


位运算符

按位取反: ~
按位与运算:  &
按位或运算:  |
按位异或运算:  ^
按位左移运算: <<
按位右移动算: >>

溢出运算符
自从swift里面提供了所谓的类型安全之后。我们就不能再用一个 Int.max 进行+1操作了,这样会导致报错。所以swift又提供了一个让我们在知道这会溢出的前提下,继续+1的溢出运算符,这听上去也不错。


溢出加法 &+
溢出减法 &-
溢出乘法 &*
溢出除法 &/
溢出取余 &%

有趣的是,我们知道许多的语言中。假设一个数被0除的话,会产生错误。而在swift中,溢出除法 &/ 被0除的话,就不会产生错误。而是会得到0值:

var a = Int.max &/ 0    //不会报错,则是a被赋值为0
var b = Int.max   / 0    // 报错。由于/不能溢出操作

优先级
虽然文档上还是描写叙述了优先级,但我认为一个正常人类是不会使用这么不经常使用的规则去写一个让还有一个正常人类不那么easy看懂的表达式的,所以能够忽略掉这里的优先级介绍,直接使用()来表明优先级。

运算符重载
swift里依旧提供了运算符重载。。

。。。不提供才可笑。。


可是,中置,前置,后置运算符的定义居然不一样。。


中置: @infix


中置运算符还包含 == , != 等等 

前置: @prefix
@prefix func +(num:Int)
-> Int{

    return num + 5

}



var a = 3

println(+a)     //结果是8

后置: @postfix
与前置几乎相同,就不写了。


组合赋值运算符: @assignment




自己定义运算符

operator prefix +++ { }  //定义了一个前置运算符 +++, 注意定义运算符的keyword operator

@prefix @assignment func +++
(inout num:Int) {

    num += 10

}



var a = 1

+++a
println(a)     //得到结果是11


自己定义中置运算符的结合性和优先级


operator表示定义一个新的运算符,infix表示是中置运算符,运算符写作 +-, associativity 表示结合性,与后面的left一起表示为左结合。 precedence表示优先级。与后面的数字一起表示优先级为140 (默认值为100)

写在最后:别把运算符玩坏了!!

!!


swift 笔记 (二十一) —— 高级运算符的更多相关文章

  1. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  2. (C/C++学习笔记) 二十一. 异常处理

    二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...

  3. swift笔记(二) —— 运算符

    基本运算符 Swift支持大部分的标准C语言的操作符,而且做了一些改进,以帮助开发人员少犯低级错误,比方: 本该使用==的时候,少写了个=, if x == y {-} 写成了 if x = y {- ...

  4. swift 笔记 (二十) —— 泛型

    泛型 泛型是为了解决在针对不同数据类型.而做了同一种功能的操作导致的每一个类型我们都要写一份代码的问题. 有了泛型,我们能够仅仅写一份逻辑代码,而适应于不同的数据类型. func swapInt(in ...

  5. Java基础学习笔记二十一 多线程

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

  6. 过滤器(web基础学习笔记二十一)

    一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResp ...

  7. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  8. python3笔记二十一:时间操作datetime和calendar

    一:学习内容 datetime calendar 二:datetime 1.模块说明:可以理解为datetime基于time进行了封装,提供了各种使用的函数,datetime模块的接口更直接,更容易调 ...

  9. Java笔记(二十一)……String与StringBuffer

    String类 String类是一个特殊的类,叫做只读类,一旦创建了对象,便不可被改变,同样"abc"既为一个常量,也为一个对象,也是不可以改变的 String s1 = &quo ...

随机推荐

  1. 入门迅速、应用广泛、月薪两万,马哥Python前景为什么这么好?

    随着Python的技术的流行,Python在为人们带来工作与生活上带来了很多的便捷,因为Python简单,学起来快,也是不少新手程序员入门的首选语言.新手们比较关心的就是Python的发展前景与方向. ...

  2. gulp(1) 的使用

    1.安装node.js 2.全局安装gulp.js npm install gulp -g 3.在项目本地根目录再安装(通过黑窗口安装)npm install --save-dev gulp/ 或者 ...

  3. 简谈Redis

    1.为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发.当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中 ...

  4. MySQL-----连表

    连表: **拿到两张表的信息** select * from userinfo,department 弊端是数据会乱,出现重复,不建议这样. **使userinfo表的part_id列与departm ...

  5. android 如何从activity跳转到另一个activity下指定的fragment

    思路: 跳转到目标fragment所在的activity,并传递一个flag,来确定要到哪个fragment,根据该flag判断后,跳转到指定的fragment即可. 代码: 当前界面: intent ...

  6. day21 04 三级菜单

    day21 04 三级菜单 1.使用递归调用的方法 整体代码类型比较简单如下: menu={'北京':{'海淀':{'a':{},'h':{},'c':{}},'昌平':{'沙河':{},'天通苑': ...

  7. 分分钟钟学会Python - 文件操作

    文件操作 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') obj.write() # 写入 obj.read() # 读取 obj.close() ...

  8. UVA 253 Cube painting(枚举 模拟)

    题意: 按如图的顺序给定2个骰子的颜色(只有r.b.g三种颜色) 问2个骰子是否一模一样 如 可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子. ...

  9. ECNU 3260 袋鼠妈妈找孩子(dfs)

    链接:http://acm.ecnu.edu.cn/problem/3260/ 题意: 给出一个x,y,k.求从左上角到(x,y)最短路径不少于k而且最快到达(x,y)的迷宫.(迷宫有多个 输出其中一 ...

  10. 用友NC客户端地址

    http://uclient.yonyou.com/liyan5(李艳) 08-23 14:29:41在这里输入http://10.0.0.67:80