栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++随笔

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++随笔

1、 x&-x表示含义

-x的值是在x的值的基础上进行按位取反~x之后,加一所得,等价于

x & -x == x & (~x + 1)

当x为偶数时,0000 0100 1110,按位取反结果为1111 1011 0001, 加一后为 1111 1011 0010。得到的结果与原x相与之后结果,只会有一位保留为1,这个结果与原x的末尾0的个数是一致的

0000 0100 1110&1111 1011 0010 = 0000 0000 0010

所以当x为偶数时结论:

1.这个结果只有一位值是1,其他位均为0
2.这个值的末位0的个数与原值保持一致

进一步得出结论:
当一个偶数与它的负值相与时,结果是能整除这个整数的最大的2的幂,即:m=n&-n,则n%m=0,且m=2^k

当x为奇数时,奇数取反后值为偶数,偶数的值+1之后,并不会影响进位,而x与取反的数相与结果肯定是0,但是由于相与的数是取反后再+1(奇数),所以说只有最后一位有翻转,所以只有最后一位都是1,相与结果仍然是1,而其他位所有的都是相反,相与一定为0,所以如果x是奇数,那x&-x的结果一定是1。

最终结论:
当一个数与其取负后的值相与,如果这个数是偶数,则结果是能整除这个偶数的最大的2的幂,如果是奇数,则结果必为1.
这个性质一般用于获取某个二进制数的最小比特位

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396400.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号