前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
项目创建
我们新建一个PlayGround
项目,命名为SwiftAdvancedOperators
。
在之前的章节中,我们学过基础运算符的使用,本章我们来学习下高级运算符之位运算符的使用。
位运算是直接对整型数据的二进制进行运算,包含按位取反运算符、按位与运算符、按位或运算符、按位亦或运算符、按位左移(右移)运算符。
按位取反运算符
按位取反运算符使用“~
”关键字对一个数值的全部比特位进行取反。示例:
var bits: UInt8 = 0b00001111 bits = ~bits print("\(bits)")
上述代码中,我们声明了一个变量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)")
上述代码中,我们声明了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)")
上述代码中,我们声明了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)")
上述代码中,我们通过“^
”关键字对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
上述代码中,我们通过“<<
”关键字和“>>
”关键字对一个数进行左移位或右移位。
但需要注意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
以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~