Swift实用小册25: 高级运算符之位运算符的使用

简介: 在本章中,你将学会高级运算符的位运算符的使用方法。

image.png

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

项目创建


我们新建一个PlayGround项目,命名为SwiftAdvancedOperators

image.png

在之前的章节中,我们学过基础运算符的使用,本章我们来学习下高级运算符之位运算符的使用。

位运算是直接对整型数据的二进制进行运算,包含按位取反运算符、按位与运算符、按位或运算符、按位亦或运算符、按位左移(右移)运算符

按位取反运算符


按位取反运算符使用“~”关键字对一个数值的全部比特位进行取反。示例:

var bits: UInt8 = 0b00001111
bits = ~bits
print("\(bits)")

image.png

上述代码中,我们声明了一个变量bits,它是UInt8类型,这里将变量bits赋值二进制数00001111

UInt88个比特位,可以存储0~255之间的数值。

我们通过关键字“~”对变量bits的值进行按位取反,那么得到的值就是二进制数11110000

按位取反:1变0,0变1

按位与运算符


按位与运算符使用“&”关键字对两个数的比特位进行合并,返回一个新的数。示例:

let firstBits: UInt8 = 0b00001111
let lastBits: UInt8  = 0b11110000
let resultBits = firstBits & lastBits
print("\(resultBits)")

image.png

上述代码中,我们声明了2个常量firstBitslastBits,都是UInt8类型。

我们通过“&”关键字对firstBitslastBits进行合并,返回resultBits,打印输出后,我们得到了00000000

按位与:有0则0,全1得1

按位或运算符


按位或运算符使用“|”关键字对两个数的比特位进行比较,返回一个新的数。示例:

let firstBits2: UInt8 = 0b00001111
let lastBits2: UInt8 = 0b11110000
let resultBits2 = firstBits2 | lastBits2
print("\(resultBits2)")

image.png

上述代码中,我们声明了2个常量firstBits2lastBits2,都是UInt8类型。

我们通过“”关键字对firstBits2lastBits2进行合并,返回resultBits2,打印输出后,我们得到了11111111

按位或:有1则1,全0得0

按位亦或运算符


按位亦或运算符使用“^”关键字对两个数的比特位进行比较,返回一个新的数。示例:

let firstBits3: UInt8 = 0b00001111
let lastBits3: UInt8 = 0b11110000
let resultBits3 = firstBits3 ^ lastBits3
print("\(resultBits3)")

image.png

上述代码中,我们通过“^”关键字对firstBits3lastBits3进行比较,返回resultBits3,打印输出后,我们得到了11111111

按位亦或:不同得1,相同得0

按位左移(右移)运算符


按位左移运算符“<<” 和按位右移运算符“>>”可以对一个数的所有位进行指定位数的左移和右移。示例:

let bits2: UInt8 = 4 // 即二进制的 00000100
bits2 << 1          // 00001000
bits2 << 2          // 00010000
bits2 << 5          // 10000000
bits2 << 6          // 00000000
bits2 >> 2          // 00000001

image.png

上述代码中,我们通过“<<”关键字和“>>”关键字对一个数进行左移位或右移位。

但需要注意2点:

一是如果移位超出范围,则移动的位将会被丢弃,上述例子中的向左移动6位,则1被丢弃。

二是移动后,原有的位置将由0代替。

本章代码


import UIKit
var bits: UInt8 = 0b00001111
bits = ~bits
print("\(bits)”)
let firstBits: UInt8 = 0b00001111
let lastBits: UInt8  = 0b11110000
let resultBits = firstBits & lastBits
print("\(resultBits)”)
let firstBits2: UInt8 = 0b00001111
let lastBits2: UInt8 = 0b11110000
let resultBits2 = firstBits2 | lastBits2
print("\(resultBits2)”)
let firstBits3: UInt8 = 0b00001111
let lastBits3: UInt8 = 0b11110000
let resultBits3 = firstBits3 ^ lastBits3
print("\(resultBits3)”)
let bits2: UInt8 = 4 
bits2 << 1          
bits2 << 2         
bits2 << 5         
bits2 << 6          
bits2 >> 2

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

相关文章
|
4月前
|
数据处理 Swift
【Swift 开发专栏】Swift 中的运算符与表达式
【4月更文挑战第30天】Swift编程中的运算符和表达式是构建程序逻辑的核心。主要运算符包括算术(+,-,×,÷,%)、关系(==,!=,&gt;,&lt;,&gt;=,&lt;=)、逻辑(&&,||,!)、位(&,|,^,~,&lt;&lt;,&gt;&gt;)和赋值(=,+=等)运算符。表达式分为算术、关系、逻辑、位和赋值类型,用于数学计算、条件判断、位操作、变量赋值及复杂逻辑。熟练掌握这些基础知识对编写高效代码至关重要。
42 1
|
11月前
|
存储 Swift 索引
11 Swift运算符
Swift运算符
68 0
|
数据安全/隐私保护 Swift
Swift实用小册26: 正则表达式的使用
在本章中,你将学会常用的正则表达式的使用方法。
284 3
Swift实用小册26: 正则表达式的使用
|
数据安全/隐私保护 Swift 索引
Swift实用小册24: AccessControl访问控制的使用
在本章中,你将学会AccessControl访问控制的使用方法。
181 0
Swift实用小册24: AccessControl访问控制的使用
|
Swift
Swift实用小册23: ARC自动引用计数机制的使用
在本章中,你将学会ARC自动引用计数机制的使用方法。
176 0
Swift实用小册23: ARC自动引用计数机制的使用
|
Swift
Swift实用小册22: OpaqueTypes不透明类型的使用
在本章中,你将学会OpaqueTypes不透明类型的使用方法。
273 0
Swift实用小册22: OpaqueTypes不透明类型的使用
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
165 0
Swift实用小册21: Generics泛型的使用
|
存储 前端开发 Swift
Swift实用小册20: Protocol协议的使用
在本章中,你将学会Protocol协议的使用方法。
256 0
Swift实用小册20: Protocol协议的使用
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
290 2
|
2月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
54 3