位运算

作者: 爱吃糖的葫芦娃 | 来源:发表于2018-09-14 10:52 被阅读0次

在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
    }

总结

这些只是位运算的一部分,在算法题目中会看到很多运用。

相关文章

  • 3、小众运算符の大课堂(一)

    较为简单の位运算符: & 位与运算| 位或运算^ 位异或运算~ 位取反运算 举例: 要做位运算,首先要把数据转...

  • 位运算及其应用

    内容概要: 位运算基本操作 基于位运算的状态压缩 位运算经典应用 位运算解N皇后问题 位运算 符号描述规则&与1&...

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • 开发基础随笔之位运算符(Bitwise Operators)

    位运算符,属于算术运算符 按位逻辑运算符: 位移运算符: 位运算符的运算数只能是整数 位移运算符:按位左移 a<<...

  • 强大的位运算符

    位取反运算符 位取反运算符(~)是对所有位的数字进行取反操作位取反运算符.png 位与运算符 位与运算符(&)可以...

  • 位运算

    位运算 1. &:按位与 规律:一假则假任何位上的数和1相&得到的结果还是那个数 2. |:按位或 规律:一真则真...

  • 位运算

    https://leetcode.com/problems/gray-code/description/这个位运算...

  • 位运算

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能。如果要开发高效率程序,位运算符是必不...

  • 位运算

    1.不用加减乘除做加法 解法:分为三步①各位相加不进位,即先按位异或;②做进位,按位与并左移位;③结果相加,直至没...

  • 位运算

    位运算不仅可以简化某些复杂的操作,而且具有更快的计算速度。典型的应用就是除法,交换两个数值,以及在一个数组中寻找只...

网友评论

      本文标题:位运算

      本文链接:https://www.haomeiwen.com/subject/kkiggftx.html