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

前言

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

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

如有错误,以你为准。

项目创建

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

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

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

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

按位取反运算符

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

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

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

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

​UInt8​​​有​​8​​​个比特位,可以存储​​0~255​​之间的数值。

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

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

按位与运算符

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

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

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

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

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

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

按位或运算符

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

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

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

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

我们通过“​​|​​​”关键字对​​firstBits2​​​和​​lastBits2​​​进行合并,返回​​resultBits2​​​,打印输出后,我们得到了​​11111111​​。

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

按位亦或运算符

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

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

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

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

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

按位左移(右移)运算符

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

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

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

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

但需要注意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

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

快来动手试试吧!

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