在iOS开发中位运算多使用到枚举中,其他地方运用的相对较少。项目中合理的运用位运算能提高我们代码的执行效率。
一、位运算(包括与,或,取反,异或,左移,右移等)
1.左移<<
将一个数转成二进制往左边移动,右边补0
0011 => 0110
2.右移>>
将一个数转成二进制往右边移动,左边补0
0110 => 0011
3.与运算&
2个数进行与运算时,将2个数的二进制进行与操作, 只有当2个数对应的位都为1,该位运算结果为1,否则运算结果为0。
1111
&1010
------
1010
4.或运算|
2个数进行或运算时,将2个数的二进制进行或操作, 当2个数对应的位有一个为1,该位运算结果为1,否则运算结果为0。
1111
|1010
------
1111
5.异或运算^
2个数进行异或运算时,将2个数的二进制进行异或操作, 当2个数对应的位不同时,该位运算结果为1,否则运算结果为0。
1111
^1010
------
0101
6.取反操作~
将一个数的二进制位中位为1的变成0,位为0的变成1。
0011 => 1100
二、位运算运用
1.不用中间变量交换两个数
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
2.判断一个数的奇偶性
if (x&1) {
NSLog("奇数");
} else
NSLog("偶数");
}
3.两个整数之间的[汉明距离]指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离
当刚看到这个题目的时候,第一想法是x和y分别和2取余存进数组中,然后将两个数组按顺序比较不同的进行记录,后来发现位运算是正确的解题思路
func hammingDistance(_ x: Int, _ y: Int) -> Int {
var m = x^y
var count = 0
while m != 0 {
if (m&1) == 1 {
count+=1
}
m = m>>1
}
return count
}
总结
这些只是位运算的一部分,在算法题目中会看到很多运用。
网友评论