swift高级运算符-读书笔记

174 阅读2分钟

1.高级运算符

  • 位运算符,移位运算符 ,溢出加法运算符,

2.位运算法

  • 按位 取反 运算符

  • 按位 运算符 &

  • 按位 运算符 |

  • 按位 异或 运算符 ^

  • 按位 左移右移 运算符 <<>>

  • 取反 ~0b00001111 = 0b11110000

  • 与 0b11111100 & 0b00111111 = 00111100

  • 或 0b10110010 | 0b01011110 = 11111110

  • 异或 0b00010100 ^ 0b00000101 = 00010001

  • 无符号左移右移 逻辑移位

  • 无符号整数的移位运算 对无符号整数进行移位的规则如下:

  • 已经存在的位按指定的位数进行左移和右移

  • 任何因移动而超出整型存储范围的位都会被丢弃

  • 用 0 来填充移位后产生的空白位

  • 颜色值16进制CC6699 转为10进制RGB(204,102,153)

  • 有符号的按位左移右移运算 算术移位

  • 符号为0为正,1为负

  • 它存储的值的绝对值等于 2 的 n 次方减去它的实际值(也就是数值位表示的值),这里的 n 为数值位的比特位数。一个 8 比特位的数有 7 个比特位是数值位,所以是 2 的 7 次方,即 128

  • 对有符号整数的右移有一个额外的规则

  • 当对整数进行按位右移运算时,遵循与无符号整数相同的规则,但是对于移位产生的空白位使用符号位进行填充,而不是用 0

3.溢出运算符

  • 溢出加法(&+)溢出减法(&-),溢出乘法(&*

  • UInt8.max &+ 1 = 0

  • UInt8.min &- 1 = 255

  • 在对有符号整型数值进行溢出加法或溢出减法运算时,符号位也需要参与计算

  • Int8.min &- 1 = 127(-128 - 1 = 127)

  • 对于无符号与有符号整型数值来说,当出现上溢时,它们会从数值所能容纳的最大数变成最小的数。同样地,当发生下溢时,它们会从所能容纳的最小数变成最大的数。

4.运算符函数

  • 类和结构体可以为现有的运算符实现自定义的实现,成为运算符重载

  • 双目中缀运算符的自定义实现 对加号的重载

  • 前缀和后缀运算符(-A)取反

  • 复合运算符 (+= )

  • 等价运算符 (== ,!=)

5.自定义运算符,自定义优先级

  • “新的运算符要使用 operator 关键字在全局作用域内进行定义,同时还要指定 prefixinfix或者 postfix 修饰符:

  • +++ 实现,自增的正值

  • 优先级