x & (-x)
2016-06-09 23:20
295 查看
结论
整数运算x & (-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。
解析
&是按位与操作,即: 1 & 1 = 1, 1 & 0 = 0, 0 & 0 = 0。 因为负数的补码 = 正数的补码取反 + 1,因此若没有+1的存在, x & (-x)的结果就是0。 分析一下可知,该操作保留的是正数的最低有效bit。 任意一个数(不管奇偶),都可以表示成 2^a + 2^b + 2^c + ...... 如果a是a、b、c......中的min,那么x & (-x) = 2^a。 奇数时,min = 0,所以x & (-x) = 1;0时,x & (-x) = 0;除零以外的偶数,x & (-x) = 2^a,这里2^a需要是x的所有因子中,最大的2的幂。
相关文章推荐
- 使用位运算实现网页中的过滤、筛选功能实例
- C#枚举中的位运算权限分配浅谈
- shell 基本计算、逻辑运算、位运算详解
- Java位运算和逻辑运算的区别实例
- 优秀程序员必须知道的20个位运算技巧
- JavaScript使用位运算符判断奇数和偶数的方法
- java位运算加密示例
- c语言中用位运算实现加法技巧介绍
- Java 位运算(移位、位与、或、异或、非)
- 位运算应用口诀和实例
- 【位运算】之 异或
- JavaScript 位运算笔记
- 想知道&&与&及||与|之间的区别吗?
- 想知道&&与&及||与|之间的区别吗?
- 不用if判断将字母进行大小写转换
- 位级运算的一点随笔
- 优秀程序员不得不知道的20个位运算技巧
- mysql位运算的应用
- 非10进制在Java中的应用
- 利用位运算实现加法运算