b = ~b + 1; // 假设b=11110000, 那么取反再加1为(00001111 + 1),为2个幂次方. 所以只有“前位位连续1, 后面位连续0的数”取反加1才为2的幂次方 if((b & (b-1)) == 0) return true; // 而只有”2的幂次方“ 与 “2的幂次方-1” 才为0. 因为2^n = 100...00, 2^n-1 = 011..11.
点赞

相关推荐

我就是0offer糕手:北大不乱杀
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务