美文网首页
swift求无符号整数二进制中 1 的个数

swift求无符号整数二进制中 1 的个数

作者: PlatoJobs | 来源:发表于2021-02-19 15:54 被阅读0次

求无符号整数二进制中 1 的个数??

思路:看一个八位整数 10 100 001 ,先判断最后一位是否为 1 ,而“与”操作可以达到目的。可以把这个八位的数字与 00000001进行“”操作。如果结果为 1 ,则表示当前八位数的最后一位为 1 ,否则为 0 。怎么判断第二位呢?向右移位,再延续前面的判断即可。


func numsOfones(num: UInt) -> UInt {
    
    var count : UInt = 0
    
    var tempp = num
    
    while tempp != 0 {
        count += tempp & 1
        tempp = tempp >> 1
    }
    
   return count
}


numsOfones(num: 7)

//  3

思考: 如果整数的二进制中有较多的 0 ,那么我们每一次右移一位做判断会很浪费,怎么改进前面的算法呢?有没有办法让算法的复杂度只与“1”的个数有关?

为了简化这个问题,我们考虑只有高位有 1 的情况。例如:11 000 000 ,如何跳过前面低位的 6 个 0 ,而直接判断第七位的 1 ?我们可以设计 11 000 000 和 10 111 111(也就是 11 000 000 - 1)做“与”操作,消去最低位的 1 。如果得到的结果为 0 ,说明我们已经找到/消去里面最后一个 1 。如果不为 0 ,那么说明我们消去了最低位的 1 ,但是二进制中还有其他的 1 , 我们的计数器需要加 1 ,然后继续上面的操作。

func numsOfones(num: UInt) -> UInt {
    
    var count : UInt = 0
    
    var tempp = num
    
    while tempp != 0 {
        count += 1
        tempp = tempp & (tempp - 1)
    }
    
   return count
}


numsOfones(num: 0x101011)

相关文章

  • 位运算符应用举例(一)

    1.两个数字交换 不借助临时变量,交换两个变量的值 2.求无符号整数二进制中1的个数 2.1 给定一个无符号整数变...

  • swift求无符号整数二进制中 1 的个数

    求无符号整数二进制中 1 的个数?? 思路:看一个八位整数 10 100 001 ,先判断最后一位是否为 1 ,而...

  • 1.3 题解:计算无符号二进制数中1的个数

    Chapter1: 位运算的奇技淫巧 3. 题解:计算无符号二进制数中1的个数 题目 计算无符号整数的二进制表示中...

  • 一、位运算

    题目 1、求一个整数,二进制时1的个数 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:最...

  • LeetCodeDay29 —— 位1的个数☆

    191. 位1的个数 描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也...

  • leetcode初级之杂项

    1. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数 例:输入:0...

  • leetcode探索初级算法之其他

    1. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明...

  • LeetCode 191.位1的个数(Number of 1 B

    191. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为...

  • 2019-01-20 Day 15

    1.位1的个数编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量...

  • LeetCode 191. 位1的个数

    题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被...

网友评论

      本文标题:swift求无符号整数二进制中 1 的个数

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