位运算应用

来源:互联网 发布:移动硬盘在mac上不能用 编辑:程序博客网 时间:2024/06/05 11:14

 参考链接

 

http://www.cppblog.com/xiaoyisnail/archive/2009/09/19/96707.html

 

本文主要内容:

1.用实例说明位运算在整数运算替代中有的优化作用

 

几道算法题
1.判断给定的整数是不是2的整数次幂
2.求给定整数的二进制表示中1/0的个数

3.求给定整数的二进制表示的有效位数

4.求大于等于给定整数的最小的2的整数次幂

5.用+,-和位运算实现正整数除法和取模 

6.if和三目运算符

 

判断给定的整数是不是2的整数次幂

与运算

如:B1000是,1001不是

T = O(1)

 

求给定整数的二进制表示中1/0的个数

与运算

num0 = sum - num1;

T = O(m) m为1的个数

 

求给定整数的二进制表示的有效位数

 移位

T = O(n) n为二进制位数

 

求大于等于给定整数的最小的2的整数次幂

如:B1111的答案为B10000。

方法1:移位

T = O(m)+O(n) = O(n), m为1的个数, n为二进制位数

 

方法2:或运算 

T = O(m)  m为1的个数

 

用+,-和位运算实现正整数除法和取模 

方法1:逐步减被除数 

方法2:以2倍逐步增加被减数大小

如:100/13

100-13>0,100-2*13>0,100-4*13>0,100-8*13<0 商:4

100-4*13=48,48-13>0,48-2*13>0,48-4*13<0 商:2

48-2*13=22,22-13>0,22-2*13<0 商:1

商:4+2+1=7 余数:9

 

 

if和三目运算符替换

利用逗号表达式和位运算,其中B和C需要有返回值

if(A) B;
else C;

A?B:C;

A && (B,1) || C

 

 

原创粉丝点击