zoukankan      html  css  js  c++  java
  • swift 笔记 (二十一) —— 高级运算符

    高级运算符

    位运算符

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

    溢出运算符
    自从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)

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

    !!


  • 相关阅读:
    【剑指offer】数字在排序数组中出现的次数
    移动互联网的架构设计浅谈一
    Android开发中遇到的adb问题解决方法
    Datagrid分页、排序、删除代码
    新辰:关于个人站点安全问题的分析及对策探讨
    Android开发中,activity页面跳转后是空白
    实战——二、c#窗体(2)
    实战——一、c#窗体(1)
    c#的sealed修饰符
    c#中,类的重写中,new和override的区别
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7137687.html
Copyright © 2011-2022 走看看