美文网首页
求一个正整数转成二进制后,有多少个1?

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

作者: 豪冷 | 来源:发表于2019-08-29 10:18 被阅读0次

    之前,看到一个判断一个正数是否是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;
        }
    

    相关文章

      网友评论

          本文标题:求一个正整数转成二进制后,有多少个1?

          本文链接:https://www.haomeiwen.com/subject/tkbbectx.html