Swift关键点28-高级操作符
00 分钟
2023-9-12
  • Swift 的第二组算术运算符默认会溢出,例如溢出加法运算符 (&+)。所有这些溢出运算符均以与号 (&) 开头。
  • 按位运算符-Bitwise NOT Operator
notion image
  • 按位运算符-Bitwise AND Operator
notion image
  • 按位运算符-Bitwise OR Operator
notion image
  • 按位运算符-Bitwise XOR Operator
notion image
  • 位移运算符-无符号整型:按位左移和右移具有将整数乘以或除以二的效果。将整数的位向左移动一个位置使其值加倍,而向右移动一个位置则使其值减半。
notion image
  • 位移运算符-有符号整型
    • 有符号整数使用其第一位(称为符号位)来指示整数是正数还是负数。符号位为 0 表示正,符号位为 1 表示负。
      • notion image
    • 然而,负数的存储方式不同。它们的存储方式是用 2 的 n 次方减去它们的绝对值,其中 n 是值位数。八位数字有七个值位,因此这意味着 2 的 7 次方,即 128。
      • notion image
    • 这种负数编码称为二进制补码表示。首先,您可以将-1添加到-4,只需对所有八位(包括符号位)执行标准二进制加法,并在完成后丢弃任何不适合八位的内容
      • notion image
    • 其次,二进制的补码表示法还可以让您像正数一样将负数的位向左和向右移动,并且每次向左移动时,它们仍然会加倍,或者每次向右移动时,它们都会减半 。 为了实现这一点,当有符号整数右移时使用额外的规则:当您将有符号整数右移时,应用与无符号整数相同的规则,但用符号位填充左侧的任何空位,而不是 比零。
      • notion image
  • 溢出运算符:当你想要把任何无效值赋给整型常量或者变量时,Swift默认会报错。
  • 当你特别希望溢出时截断可用位数时,您可以选择截断而不是触发错误。Swift提供了三种&开头的截断操作符。
    • 溢出加(&+)
    • notion image
    • 溢出减(&-)
    • notion image
    • 溢出乘(&*)
    • notion image
  • 优先级和关联性
  • 运算符方法:类和结构体可以重写现有的运算符。
notion image
  • 前缀或后缀运算符:使用prefix或者postfix关键字
  • 复合赋值运算符:三元条件运算符(a ? b : c)和赋值运算符(=)不能被重写。
  • 等价运算符:可以自己实现或者让Swift帮你合成。两种情况都需要满足Equatable协议。
  • 自定义运算符:新运算符使用operator关键字在全局级别声明,并用前缀、中缀或后缀修饰符进行标记
  • 自定义中缀运算符的优先级:未显式放入优先级组的自定义中缀运算符会被赋予默认优先级组,其优先级立即高于三元条件运算符的优先级。
  • 结果构建器:结果生成器是您定义的一种类型,它添加用于以自然的声明性方式创建嵌套数据(例如列表或树)的语法。
  • 您可以将 @DrawingBuilder 属性应用于函数的参数,这会将传递给函数的闭包转换为结果生成器从该闭包创建的值。

评论