奇思妙想位运算
2016-03-15 23:47
176 查看
本篇旨在记录”奇思妙想”的位运算。
解析
c-1 会导致c最末尾的1 因为借位变为0,而此前最末尾的1后面必然全是0(或者1为个位),所以当c&(c-1)时,就相当于消去c中最末尾的一个1。 如6的二进制是0110,6-1的二进制是0101。
解析
x|(x+1)的作用是对一个数中二进制0的个数进行统计.
1的个数
int c = 10; int count = (c == 0 ? 0 : 1) ; while( c = c&(c-1) ){ count++; }
解析
c-1 会导致c最末尾的1 因为借位变为0,而此前最末尾的1后面必然全是0(或者1为个位),所以当c&(c-1)时,就相当于消去c中最末尾的一个1。 如6的二进制是0110,6-1的二进制是0101。
0的个数
int c = 10; int count = 0 ; while( c+1 ){ count++; c = c | (c+1); }
解析
x|(x+1)的作用是对一个数中二进制0的个数进行统计.
求余
用位运算求a%b,要求b是2的n次幂,即b必须是1,2,4,8…等等类型的数才可以。c & (8- 1); //等价于c % 8, 另外8 = 1<<3;
判断奇偶性
奇数二进制最后一位为1 。(i & 1) == 0 ; //成立表示是偶数
swap功能
交换a和b的值,而不借助第三方变量。a ^= b; b ^= a; a ^= b;
相反数
a = a * (-1);~a + 1
相关文章推荐
- Android滑动回弹效果
- 7.广播和多播,IGMP协议
- 和我一起学Effective Java之创建和销毁对象
- Blcoking I/O & NonBlocking I/O
- Android布局优化
- java基础(三)之数据类型
- log4j,配置,详解
- 关灯看视频(Turn Off the Lights)
- Memcached(2)------实例使用
- 给 Android 开发者的 RxJava 详解
- 【每周一文】Collaborative Filtering for Implicit Feedback Datasets(2008)
- OSPF协议详解
- Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset
- 逆战按键盘
- 6.UDP协议
- 【Linux】 CPU亲和性(affinity)及与亲和性有关的两个函数 sched_setaffinity()和 sched_getaffinity()
- C-SCAUoj 输出不同的数
- android解析XML总结(SAX、Pull、Dom三种方式)
- 关于工作思考(一)
- JavaScript学习笔记:1、调试和隐藏元素