千家信息网

怎样通过Objective-C的枚举学习iOS中位操作.md

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家分享的是有关怎样通过Objective-C的枚举学习iOS中位操作.md的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。位操作位操作是对二进制数逐位进行运算或移
千家信息网最后更新 2026年11月04日怎样通过Objective-C的枚举学习iOS中位操作.md

这篇文章给大家分享的是有关怎样通过Objective-C的枚举学习iOS中位操作.md的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

位操作

位操作是对二进制数逐位进行运算或移位。它共包含两种操作:位运算和移位。下面就详细的了解一下这两种操作。

在此只讨论iOS中的所有位操作的运算符,别的语言的相同含义的操作符号可能不同

位运算符(以下操作符皆同Objective-C)

位运算符一种包含下面几种:

~(取反,一元操作符):它会对目标数字的二进制每位进行取反

let initialBits: UInt8 = 0b00001111let invertedBits = ~initialBits // equals 11110000

|(按位或):它会对两个目标数字的相同位置数字进行或运算,规则:0和0为0;0和1为1;1和1为1

let targetNum = 5 // 101let targetNum2 = 6 // 110print(targetNum | targetNum2) //print 7//targetNum: 101//targetNum2: 110//result: 111 (十进制 7)

&(按位与):它会对两个目标数字的相同位置数字进行与运算,规则:0和0为0;0和1为0;1和1为1

let targetNum = 5 // 101let targetNum2 = 6 // 110print(targetNum & targetNum2) //print 4//targetNum: 101//targetNum2: 110//result: 100 (十进制 4)

^(异或):它会对两个目标数字的相同位置数字进行异或运算,如果不同则该位为1,否则该位为0。规则:如0和0为0;0和1为1;1和1为0

let targetNum = 5 // 101let targetNum2 = 6 // 110print(targetNum ^ targetNum2) //print 3//targetNum: 101//targetNum2: 110//result: 011 (十进制 3)

移位

>>(右移):它会对目标数字按位右移x位

let targetNum = 5 // 101print(targetNum >> 2) //print 1//targetNum: 101//右移2位//result: 1 (十进制 1)

<<(左移):它会对目标数字按位左移x位(右边补0)

let targetNum = 5 // 101print(targetNum << 2) //print 20//targetNum: 101//左移2位//result: 10100 (十进制 20)

枚举中的位操作

通过上文我们了解了位操作的具体计算方式,接下来看一下在枚举中的具体应用。

枚举中的应用

定义枚举

OC

typedef NS_OPTIONS(NSInteger, CellExLineType) { CellExLineTypeTopLong = 0, CellExLineTypeTopNone = 1 << 0, //十进制 1 CellExLineTypeBottomLong = 1 << 1, //十进制 2 CellExLineTypeBottomNone = 1 << 2, //十进制 4};

Swift

struct CellExLineType: OptionSet { let rawValue: Int static let topLong = CellExLineType(rawValue: 0) static let topNone = CellExLineType(rawValue: 1 << 0) static let bottomLong = CellExLineType(rawValue: 1 << 1) static let bottomNone = CellExLineType(rawValue: 1 << 2)}

位操作在枚举中的作用

~(取反):用来剔除某个值

//OCself.lineType = CellExLineTypeTopNone;self.lineType |= CellExLineTypeBottomNone;self.lineType = self.lineType & ~CellExLineTypeTopNone; //self.lineTye 只包含CellExLineTypeBottomNone//Swiftvar lineType: CellExLineType = [.topNone, .bottomNone]lineType.remove(.topNone)

|(按位或):用来添加某个值

//OCself.lineType = CellExLineTypeTopNone; //self.lineType 包含CellExLineTypeTopNoneself.lineType = self.lineType | CellExLineTypeBottomNone; //self.lineType 包含CellExLineTypeTopNone和CellExLineTypeBottomNone//Swiftvar lineType: CellExLineType = [.bottomNone]lineType.insert(.topNone)

&(按位与):用来检查是否包含某个值

//OCif ((self.lineType & CellExLineTypeTopNone) == CellExLineTypeTopNone) { NSLog(@"包含CellExLineTypeTopNone");}//Swiftvar lineType: CellExLineType = [.topNone, .bottomNone]if lineType.contains(.bottomNone) { print("包含bottomNone")}

^(异或):用来置反某个值(如果包含则剔除,如果不包含则添加)

//OCself.lineType = CellExLineTypeTopNone | CellExLineTypeBottomNone; //self.lineType 包含CellExLineTypeTopNone和CellExLineTypeBottomNoneself.lineType = self.lineType ^ CellExLineTypeTopNone; //self.lineTye 只包含CellExLineTypeBottomNoneself.lineType = self.lineType ^ CellExLineTypeTopNone; //self.lineType 包含CellExLineTypeTopNone和CellExLineTypeBottomNone//Swiftvar lineType: CellExLineType = [.topNone, .bottomNone]if lineType.contains(.topNone) { lineType.remove(.topNone)} else { lineType.insert(.topNone)}

在枚举中使用位操作我们可以方便的给一个属性值赋值多个值,比如下面的代码给lineType赋值了CellExLineTypeTopNone和CellExLineTypeBottomNone属性。这样我们就可以在lineType的set方法里面处理CellExLineTypeTopNone和CellExLineTypeBottomNone的情况。

//OC- (void)setLineType:(CellExLineType)lineType { _lineType = lineType; if (lineType & CellExLineTypeTopNone) { NSLog(@"top none"); } if (lineType & CellExLineTypeBottomNone) { NSLog(@"bottom none"); }}//Swiftvar lineType: CellExLineType = [.topNone, .bottomNone]if lineType.contains(.topNone) { lineType.remove(.topNone)}if lineType.contains(.bottomNone) {}

在系统中的许多Enum也是这么使用的,如UIViewAutoresizing、UIViewAnimationOptions等。

为什么要在枚举中使用位操作符?

在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)可以给一个属性同时设置多个值

感谢各位的阅读!关于"怎样通过Objective-C的枚举学习iOS中位操作.md"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

运算 数字 十进制 十进 目标 相同 两个 位置 属性 操作符 规则 运算符 学习 不同 二进制 内容 多个 情况 更多 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技类互联网 金融科技与互联网金融 万易互联网科技有限公司 华中科技大学互联网 赫美联合互联网科技 科技互联网创业计划书 汉立互联网科技有限公司联系电话 博兴的互联网电子科技公司 深圳前海聚择互联网科技有限公司 彤创互联网科技有限公司 链环科技传统企业怎么转型互联网 中国互联网十大科技股排名 亳州好赞互联网科技有限公司 区块链结合互联网科技 互联网金融科技元年 怎样加入科技互联网 智帮互联网科技公司最近动向 南京一网一红互联网科技有限公司 容联科技互联网电商 兰石爱特工业互联网科技分公司 互联网与科技 科技互联网项目 互联网金融与金融科技 一五八零互联网科技 哈尔滨新华互联网科技 佩信高科技互联网 全球顶尖互联网科技公司 宝灵互联网科技有限公司 互联网与医疗科技 卓翼科技产业互联网合作
0