高级运算符


位运算符

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

溢出运算符
自从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. ios远程推送和python版push server相关笔记

    今天研究了下ios的远程推送,网上的相关教程很多,做了一遍下来记录一下遇到的问题和注意事项(转载请注明) 1.证书及乱七八糟的配置 公钥:app id管理那儿的“Development Push SS ...

  2. IO 双引号 输出 输入

    #! /usr/bin/perl use strict;use warnings; print "\n---------<STDIN>_store_into_an_array_a ...

  3. 第1节 yarn:14、yarn集群当中的三种调度器

    yarn当中的调度器介绍: 第一种调度器:FIFO Scheduler  (队列调度器) 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源 ...

  4. CSU2179: 找众数

    Description 由文件给出N个1到30000间无序数正整数,其中1≤N≤10000,同一个正整数可能会出现多次,出现次数最多的整数称为众数.求出它的众数及它出现的次数. Input 输入文件第 ...

  5. [Python3网络爬虫开发实战] 2.5-代理的基本原理

    我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到“您的 ...

  6. 【转】Delphi 文件拖放

    转自:万一的博客. 原理分析: 这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles.DragQueryFile; 用 DragAcceptFiles(窗口句柄, True) ...

  7. 15Spring泛型依赖注入

    Spring 4.x中可以为子类注入子类对应的泛型类型的成员变量的引用 BaseService<T>:有RoleService和UserService两的子类 BaseRepepositr ...

  8. python Django 相关学习笔记

    Django框架 pip3 install django 命令: # 创建Django程序 django-admin startproject mysite # 进入程序目录 cd mysite # ...

  9. POJ1013称硬币【枚举】

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52474   Accepted: 16 ...

  10. Windows 下安装 Node.js

    搭建博客系列的 Node.js 环境安装.Windows 下面安装可以通过图形化界面进行安装,非常方面. 1.打开 Node.js 官网,下载对应版本的安装包(msi 后缀的) 2.双击运行下载的程序 ...