位操作的基础与应用举例
来源:互联网 发布:免费的音乐软件 编辑:程序博客网 时间:2024/05/24 03:22
通过在leetcode上面做题发现,位操作是一个非常实用但是容易被忽略的技巧。所以在这篇文章中归纳常用的位操作基础和技巧,并通过例子来直观地理解位操作的实际应用。
在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果。因此本文将对位操作进行如下方面总结:
一、位操作基础:用一张表描述位操作符的应用规则并详细解释。 二、常用位操作小技巧:判断奇偶、判断一个数是否是2的方幂、计算二进制中1的个数。
一、位操作基础
需要注意:
1、位操作只能用于整形数据,对float和double类型进行位操作会被编译器报错。
2、位操作符的运算优先级比较低,应尽量使用括号来确保运算顺序。
3、位操作还有一些复合操作符,如&=、|=、 ^=、<<=、>>=。
二、常用位操作小技巧
1、判断奇偶
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。
下面程序将举例如何应用:
int a;if (a & 1) { cout << "a是奇数" << endl;}if ((a & 1) == 0) { cout << "a是偶数" << endl;}
2、判断一个数是否是2的方幂
首先要理解n&(n-1)作用:将n的二进制表示中的最低位为1的改为0。
举个例子:
n = 10100(二进制),则(n-1) = 10011 ==> n&(n-1) = 10000
可以看到原本最低位为1的那位变为0。
该问题的代码为:
n > 0 && ((n & (n - 1)) == 0 )
如果((n & (n-1)) == 0),则二进制的最高位为1,其余位均为0,所以n是2的幂。
3、计算二进制中1的个数
代码如下:
while (n > 0) { count++; n &= (n-1);}
该技巧的应用可以参考leetcode上的《461. Hamming Distance》。
0 0
- 位操作的基础与应用举例
- 位操作基础应用
- 位运算应用举例
- 位操作的基础
- 基础的位操作
- 串操作应用举例
- java位运算应用举例
- SOAP协议的解释与应用举例
- 【C++】位操作的应用
- 按位操作的应用
- 位带操作与OMAP-L138的举例分析
- C语言位操作的神应用(位操作)
- Java中的位操作使用举例
- 定时器的应用举例
- StringBuffer的应用举例
- 栈的应用举例
- 队列的应用举例
- 查表法的应用举例
- LeetCode 513. Find Bottom Left Tree Value
- Python3条件控制、循环控制
- json文本和对象之间的转换
- 因子分析法--用Java语言设计算法
- 创建线程的两种方式
- 位操作的基础与应用举例
- 一个复杂页面该如何布局设计
- koa中间件机制详解
- SSM杰信商务平台项目day04
- Android-6.0之PMS安装APK上篇
- 数学之美系列好文,强烈推荐
- 文章标题
- Asking The Right Questions -- Note One: Find the issue and conclusion.
- 微信开发八 用户管理