Swift-二进制中1的个数

实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2.

常规解法

    func countPositionNumber(number:Int) -> Int {
        var num:Int = number
        var count = 0
        while num != 0 {
            if num%2 == 1 {
                count += 1
            }
            num = num/2
        }
        return count
    }
    
    func countPositionNumber1(number:Int) -> Int {
        var num:Int = number
        var count = 0
        while num != 0 {
            if (num & 1) == 1 {
                count += 1
            }
            num = num >> 1
        }
        return count
    }

优化解法

上面的两种函数只能满足正整数的1的个数,我们可以不断移位1,判断1的个数,包含负整数:

    func countPositionNumber2(number:Int) -> Int {
        let num:Int = number
        var flag = 1
        var count = 0
        while flag > 0 {
            if (num & flag) > 0 {
                count += 1
            }
            flag = flag << 1
        }
        return count
    }

最优解

将一个整数减1然后和原来的整数做位与运算,相当于原有的二进制数最右边的1变为0.

    func countPositionNumber3(number:Int) -> Int {
        var num:Int = number
        var count:Int = 0
        while num > 0 {
            count += 1
            num = num & (num-1)
        }
        return count
    }

测试代码:

        let count:Int = self.countPositionNumber(number: 0xFFFFFFFF)
        print("FlyElephant-数字中1的个数:\(count)")
        
        let count1:Int = self.countPositionNumber1(number: 0xFFFFFFFF)
       print("FlyElephant---数字中1的个数:\(count1)")

        //0xFFFFFFFF
        let count2:Int = self.countPositionNumber2(number: 0xFFFFFFFF)
        print("FlyElephant---数字中1的个数:\(count2)")
        
        let count3:Int = self.countPositionNumber2(number: 0xFFFFFFFF)
        print("FlyElephant---数字中1的个数:\(count3)")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容