求一个正整数转成二进制后,有多少个1?

之前,看到一个判断一个正数是否是2的乘方(比如16是2的4次方)。要求性能尽可能高。

思路一:从int temp = 1开始,每次循环比较是否与number相等,不相等就让temp增大一倍(temp = temp*2),如此循环比较,直到相等为止。

这个方法的时间复杂度是O(LogN)。

思路二:寻找是2的乘方的数,的规律。

            N        N-1
     2  ->  10b      1b
     4  ->  100b     11b
     8  ->  1000b    111b
     16 ->  10000b   1111b

最高位都是1

所以,N&(N-1) = 0。时间复杂度为O(1)。

那么,求一个正整数转成二进制后,有多少个1?

当然,也应该与位运算有关了。

一个数N,N&1 要么是0,要么是1。

所以,结果为1时,说明最低位是1。为0时,说明最低位不是1。

因此,每次&后,都右移一位,再次&,直到N右移为0时,结束循环。

    NSInteger value = 111;
    NSInteger count = 0;
    while (value) {
        NSLog(@"%ld",value&1);
        int x = value&1;
        if (x == 1) count++;
        value = value>>1;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容