使用位运算判断整数是否可被2的幂(2、4、8、16……)整除?

作者:CodeArhat 
来源:CSDN 
原文:https://blog.csdn.net/codearhat/article/details/6821990 

// 大部分位运算的技巧早在几十年前就被前辈们在有限的计算环境下“榨”出来了。
// “原创”只是表示这篇文章是我所写,并非翻译或转贴,但也绝不是我“首创”。

能被2^N整除(N >= 1),则a的二进制表示中,低N位全为0,因此:

(a %  2)  <==> (a &  1)
(a %  4)  <==> (a &  3)
(a %  8)  <==> (a &  7)
(a % 16)  <==> (a & 15)  <==> (a & ((1 << 4) - 1))
……


现在的编译器已经足够聪明,上面左边的表达式很可能会被自动优化,所以可能看不出求余与按位与的性能差距。
但能在DEBUG模式下快一点,还是有价值的。(设想正常要跑一分钟的程序,调试时需要10分钟才能运行到你所下的断点,会是多么痛苦……)
 

猜你喜欢

转载自blog.csdn.net/panda1234lee/article/details/85129340
今日推荐