二十三、高级操作符

1. 概述

除了二、基本数据类型中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算。

不同于C语言中的算术运算符 arithmetic operators ,Swift 的算术运算符默认是不可溢出的 overflow。溢出行为会被捕获并报告为错误。当然,如果你需要溢出的话,Swift也也提供了另一套默认允许溢出的算术操作符,如可溢出加 &+ 。所有允许溢出的操作符都是以 & 开始的。

当你定义自己的类、结构体、枚举的时候,可以提供它们的基本操作符的自定义实现。

在Swift中,你除了可以自定义这些已经预定义 predefined 的操作符的具体实现,你还可以自由定义中缀 infix、前缀 prefix、后缀 postfix 和赋值操作符,同时还能自定义这些操作符的优先级 precedence 和 关联值 associativity values。这些自定义的操作符可以像Swift预定义的操作符一样在代码中使用,甚至扩展一些已存在的类型,使它们支持这些自定义的操作符。

2. 位运算操作符(按位操作符) Bitwise Operators

位运算操作符允许你按位 bit 操作数据,一般使用在底层程序中,比如图形处理和驱动程序中。也可以用于处理元数据  raw data。

Swift 支持 C语言中所有的位运算符。

 

2.1 按位取反 Bitwise NOT Operator

按位取反运算符~ 对一个操作数的每一位都取反。

~ 是前缀 prefix 操作符,出现在操作数前面,之间没有空格 。

    let initialBits: UInt8 = 0b00001111 // 使用二进制数表示
    let invertedBits = ~initialBits // equals 11110000

2.2 按位与 Bitwise AND Operator

按位与运算符 & 对两个数进行操作,然后返回一个新的数,两个输入数的同一位都为1时才为1。

    let firstSixBits: UInt8 = 0b11111100
    let lastSixBits: UInt8 = 0b00111111
    let middleFourBits = firstSixBits & lastSixBits // equals 00111100

2.3 按位或 Bitwise OR Operator

按位与运算符 | 对两个数进行操作,然后返回一个新的数,要两个输入数的同一位有一个为1时就为1。

    let someBits: UInt8 = 0b10110010
    let moreBits: UInt8 = 0b01011110
    let combinedbits = someBits | moreBits // equals 11111110

2.4 按位异或 Bitwise XOR Operator

按位与运算符 ^ 对两个数进行操作,然后返回一个新的数,要两个输入数的同一位不相同时就为1,相同时为0。

时间: 2024-07-31 05:36:42

二十三、高级操作符的相关文章

Vue.js 源码分析(二十三) 高级应用 自定义指令详解

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上时,该元素在初次渲染.插入到父节点.更新.解绑时可以执行一些特定的操作(钩子函数() 自定义指令有两种注册方式,一种是全局注册,使用Vue.directive(指令名,配置参数)注册,注册之后所有的Vue实例都可以使用,另一种是局部注册,在创建Vue实例时通过directives属性创建局部指令,局

攻城狮在路上(叁)Linux(二十三)--- linux磁盘参数修改(设备代码、设备名)

一.mknod:设置设备代码 linux中,所有的设备都是用文件来表示,文件通过major与minor数值来判断. major为主设备代码,minor为设备代码(需要查询),示例如下: /dev/hda ---------major:3------minor:0~63 /dev/hdb----------major:3------minor:64~127 /dev/sda----------major:8------minor:0~15 ... 命令格式:mknod 设备名 [bcp] [maj

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示 算法系列之二十三离散傅立叶变换之音频播放与频谱显示 导语 什么是频谱 1 频谱的原理 2 频谱的选择 3 频谱的计算 显示动态频谱 1 实现方法 2 杂项说明 结果展示 导语 频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷.在上一篇对离散傅立叶变换介绍的基础上,本篇就进一步介绍一下频谱是怎么回事儿,下一篇继续介绍

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十三:DS1302模块

实验二十三:DS1302模块 DS1302这只硬件虽然曾在<建模篇>介绍过,所以重复的内容请怒笔者懒惰唠叨了,笔者尽可以一笑带过,废话少说让我们进入正题吧.DS1302是执行事实时钟(Real Time Clock)的硬件,采用SPI传输. 表示23.1 访问(地址)字节. [7] [6] [5] [4] [3] [2] [1] [0] 1 A5 A4 A3 A2 A1 A0 R/W DS1302作为从机任由主机蹂躏 ... 啊,是任由主机访问才对.对此,访问便有方向之分.如表23.1所示,访

从零开始学android&lt;RatingBar评分组件.二十三.&gt;

如果现在用户要对某个应用程序打分往往会使用图所示的组件,通过选择的"五角星"的个数来决定最终的打分成绩 这样的功能在Android之中,可以使用RatingBar组件实现,使用此组件可以方便用户的输入,而且很直观,RatingBar类的定义结构如下: java.lang.Object ? android.view.View ? android.widget.ProgressBar ? android.widget.AbsSeekBar ? android.widget.RatingBa

sed(二)高级部分

原文是这么说的:一旦你理解了这里所给出的命令,那么就可以认为自己是真正的sed主人了 为了成为sed的主人,大伙一起努力吧 sed高级命令分为三块 处理多模式空间(N,D,P) 采用保持空间来保持模式空间的内容并使它可用于后续的命令(H,h,G,g,x) 编写使用分支和条件指令的脚本来更改控制了(:,b,t) 咱们先温习下,基础部分,sed的处理过程吧 通常来说,一行被读进模式空间,并且用脚本中的每个命令(一个接一个地)应用于该行.当到达脚本底部时,输出这一行,并清空模式空间.然后新行被读入模式

使用delphi 开发多层应用(二十三)KbmMW 的WIB

解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式.前面的各种服务的工作方式都是请求/应答方式. 客户端发送请求,服务器端根据客户端的请求,返回相应的结果.这种方式是一种顺序式访问,是一种紧耦合的方式. 服务器被动接受访问,服务器无法直接给客户端发消息.针对这种情况出现了发布/订阅方式.现在这种方式很热呀! 发布/订阅方式类似出版社发行杂志,出版社每年要求大家订阅杂志,当你订阅后,每月到时,不管你有没有问, 杂志都会准时送到你家门口.对于计算机系统类似,当你订阅了服务器上的某种消息后,

全栈JavaScript之路( 二十三 )DOM2、DOM3, 涉及XML命名空间的扩展(一)

<!DOCTYPE html> <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"> <head> <title>Example XHTML page</title> </head> <body> <s:svg xmlns:s="http://www.w3.org/2000/svg" version="1.1&

【管理心得之二十三】道是道,非常道。名可名,非常名。

场景再现 ====================== {一次PMP社团活动} 主持人   :在坐的各位,有谁自己动手煮过饺子或面条?请举手示意. 主持人   :真不少呀!那么把饺子或面条下锅之后,水沸腾.向外溢出时,你会怎么做? 80%回答道:加冷水 主持人   :为什么加冷水? 80%回答道:冷水 可以防止水沸腾,防止溢出. 主持人   :这是唯一方法吗? 20%回答道:还可以把火拧小,控制火温. 主持人   :这个方法似乎更方便,为什么刚开始的作答不是后者呢? ==============