x & (-x)

结论

 整数运算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的幂。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 11:16
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务