位运算的实用性技巧
1.为什么使用位运算
位运算主要是直接操控二进制时使用 ,主要目的是节约内存,使你的程序速度更快,还有就是对内存要求苛刻的地方使用.
2.位运算基本知识点
运算符表格
运算符 | 含义 | 功能 | |
---|---|---|---|
& | 按位与 | 如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。 | |
\ | 按位或 | 两个相应的二进制位中只要有一个为1,该位的结果值为1。 | |
∧ | 按位异或 | 若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真) | |
~ | 取反 | ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。 | |
<< | 左移 | 左移运算符是用来将一个数的各二进制位全部左移N位,右补0。 | |
>> | 右移 | 表示将a的各二进制位右移N位,移到右端的低位被舍弃,对无符号数,高位补0。 |
3.高级位运算使用技巧
(1)位移符号 <<,在二进制中,位移一位相当于乘2,所以与2的倍数相乘,可以转化为位移。
(2)正负号转换:~符号是将原数反转后加1,i = ~i + 1; // NOT 写法 i = (i ^ -1) + 1; // XOR 写法
(3)取余数:x = 131 % 4; ==> x = 131 & (4 - 1);
(4)判断变量相等:x^x==0
(5)判断奇偶数:a&1{奇数}
(6)交换变量:a^=b,b^=a,a^=b
(7)求两数的平均数:(x + y) >> 1
(8)计算n+1:-~n;计算n-1:~-n;取相反数:~n + 1;
(9)取整数: