Swift-高级运算符

//***********************************

//

//             高级运算符

// &+ : 向上溢出

// &- : 向下溢出

// &/ : 除零溢出,0作为被除数时结果是0

// &% : 模零溢出,对0求余结果是0

//

//***********************************

 

var willOverflow = UInt8.max     //等于255

willOverflow= willOverflow &+ 1 // 等于0

willOverflow= willOverflow &+ 1 // 等于2

 

var willUnderflow = UInt8.min       // 等于0

willUnderflow= willUnderflow &- 1 // 等于255

 

let x = 1

let y = x&/ 0   // 等于0

let z = x&% 0   // 等于0

 

//***********************************

//

// 运算符函数/运算符重载

// 让已有的运算符对自定义类和结构体进行运算

// 1.中置运算符

// 2.前置和后置运算符

// 3.组合赋值运算符

// 4.比较运算符

// 5.自定义运算符

//

//***********************************

 

//*********************

//     1.中置运算符

//*********************

struct Vector2D {

    var x = 0.0 , y= 0.0

    

}

 

func + (left: Vector2D,right: Vector2D) -> Vector2D {

    return Vector2D(x:left.x + right.x,y: left.y + right.y)

}

 

let vector1 = Vector2D(x:1.0, y: 2.0)

let vector2 = Vector2D(x:3.0, y: 4.0)

let vector3 = vector1+ vector2    // {x 4.0, y 6.0}

 

 

//*********************

//  2.前置和后置运算符

//  前置:prefix

//  后置:postfix

//*********************

 

prefix func-(vector: Vector2D) -> Vector2D {

    return Vector2D(x:-vector.x, y: -vector.y)

}

postfix func++(vector: Vector2D) -> Vector2D {

    let x = vector.x+ 1

    let y = vector.y+ 1

    return Vector2D(x:x, y: y)

}

let positive = Vector2D(x:3.0, y: 4.0)

let negative = -positive  //{x -3.0, y-4.0}

let plusplus = positive++ //{x 4.0, y 5.0}

 

//*********************

//  3.组合赋值运算符

//  : +=

//  需要使用inout修饰形参

//*********************

func += (inoutleft: Vector2D, right: Vector2D) {

    left =left + right

}

var original = Vector2D(x:1.0, y: 2.0)

let v1 = Vector2D(x:3.0, y: 4.0)

original += v1 //{x 4.0, y 6.0}

 

 

//*********************

//

//  4.比较运算符

//

//*********************

func == (left: Vector2D,right: Vector2D) -> Bool {

    return (left.x== right.x) && (left.y == right.y)

}

func != (left: Vector2D,right: Vector2D) -> Bool {

   return !( left == right ) //使用上面定义的运算符

}

 

 

//*********************

//

//  5.自定义运算符

//  需要先使用关键字operator在全局域声明

//  前置:prefix

//  后置:postfix

//  中置:infix

//

//*********************

 

prefix operator +++ {}

prefix func +++(inout vector: Vector2D)-> Vector2D {

   vector += vector   //使用上面定义的运算符

    return vector

}

 

//******************************

//

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

//

//******************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值