利用位操作实现简单的功能
2016-07-15 00:56
309 查看
利用位操作实现简单的功能
位操作虽然会降低程序的可读性,但是我想,热衷于位操作的人大概都是被它的效率所吸引了。如果某些简单但常用的功能可以利用位操作实现,且用位操作实现的代码量相同或更少,我希望让这些位操作得到普及。在介绍之前,先列举一下位操作符
a&b //按位与 a|b //按位或 a^b //按位异或 ~a //按位取反 a<<b //左移 a>>b //有符号右移 a>>>b //无符号右移
1. 交换两个整数的值
刚开始接触编程的时候我以为交换两个变量一定需要一个临时变量,但是利用位操作交换两个整数不必需要第三个变量。请看下面的例子:
int a = 9; int b = 11; a=a^b; //1001^1011=0010 b=b^a; //1011^0010=1001 a=a^b; // 0010^1001=1011
如此便可以交换两个整数的值而不必用第三个参数
2.快速判断两个值时候相等
在学汇编的时候我们也是用xor ax,ax来置零,而并非sub ax,ax。同样道理,要判断两个int数字a,b是否相等,很多人会想到判断a - b == 0,但是如果判断a ^ b == 0效率将会更高。
3.判断奇偶性
利用位操作判断奇偶性可以写成
int a=5; return a&1; //偶数返回0,奇数返回1
4.除以2 & 乘以2
int a=5; a>>1; //除以2 a<<1; //乘以2
相关文章推荐
- C/C++位操作实例总结
- C++位操作的常见用法小结
- golang 位操作
- 位操作实现四则运算
- 位操作实现加法
- 用+,-,移位实现除法运算
- 【LeetCode】Single Number II
- C# 位操作
- leetcode:Divide Two Integers菜鸟解法
- 联合体+位域,实现位操作,并可以整体读出
- Codility -- PermMissingElem
- [leetcode 190]Reverse Bits
- [leetcode 191]Number of 1 Bits
- Leetcode:Repeated DNA Sequences
- [LC136] Single Number
- 318. Maximum Product of Word Lengths
- 位操作_求二进制中1的个数
- 《编程之美》读书笔记(二)——二进制数中“1”的个数
- C# 使用属性实现位状态结构体
- Java 快速交换 位操作的应用