首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用位运算符计算1的个数

可以通过以下几种方法来实现:

  1. 循环和位移运算符:
    • 每次通过右移操作符(>>)将数字逐位进行检查,直到所有位都被检查完。
    • 检查最右边的位是否为1,可以通过与运算符(&)将数字与1进行与操作,如果结果为1,则表示最右边的位是1。
    • 计数变量count初始化为0,每当最右边的位为1时,count加1。
    • 每次右移一位,继续进行上述检查,直到所有位都被检查完。
    • 最后返回计数变量count的值即可。
  • 位运算与减一操作:
    • 每次通过减一操作符(-1)将数字的最右边的1变为0,并将其右边的所有位变为1。
    • 每进行一次减一操作,数字中的一个1就会变为0。
    • 循环进行减一操作,直到数字变为0,循环的次数即为1的个数。

这两种方法都能有效地计算1的个数。其中,第一种方法适用于大多数编程语言,而第二种方法在一些特定的编程语言中可能效率更高。

此外,位运算符计算1的个数在许多领域有广泛的应用,包括编码和加密算法、图像处理、数据压缩等。

腾讯云提供了丰富的云计算服务和产品,如云服务器、容器服务、无服务器云函数等,可以根据具体需求选择适合的产品进行开发和部署。具体详情请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1个数 逻辑运算符

逻辑运算符 运算就是对二进制数执行计算,是整数运算。 图片.png & 按与 如果两个相应二进制都为1,则该位结果值为1,否则为0。...~ 取反 ~是一元运算符,用来对一个二进制数按取反,即将0变1,将1。 << 左移 用来将一个数各二进制全部左移N,右补0。...>> 右移 将一个数各二进制右移N,移到右端低位被舍弃,对于无符号数, 高位补0。...1个数 编写一个函数,输入是一个无符号整数(以二进制串形式),返回其二进制表达式中数字位数为 '1' 个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。...0 来填充所有的空位,同时会把负数作为正数来处理,所得结果会非常大所以,使用无符号右移运算符时要特别小心,避免意外错误。

81230
  • Leetcode No.191 1个数

    一、解题思路 编写一个函数,输入是一个无符号整数(以二进制串形式),返回其二进制表达式中数字位数为 '1' 个数(也被称为汉明重量)。...为 '1'。...提示: 输入必须是长度为 32 二进制串 。 二、解题思路 我们遍历数字 32 。如果某一1 ,将计数器加一。 我们使用 掩码 来检查数字第 i 。...一开始,掩码 m=1 因为 1 二进制表示是 0000 0000 0000 0000 0000 0000 0000 0001 显然,任何数字跟掩码 1 进行逻辑与运算,都可以让我们获得这个数最低位...运行时间依赖于数字 n 位数。由于这题中 n 是一个 32 位数,所以运行时间是 O(1)。 空间复杂度:O(1)。没有使用额外空间。

    24420

    Number of 1 Bits(1个数

    题目描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1个数(也被称为汉明重量)。...如果我们把这个整数减1,那么原来处在整数最右边1就会变为0,原来在1后面的所有的0都会变成1(如果最右边1后面还有0的话)。 其余所有将不会受到影响。...思路三: 用flag来与n每位做位于运算,来判断1个数 代码实现 package BitManipulation; /** * 191....Number of 1 Bits(1个数) * 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1个数(也被称为汉明重量)。...* 如果我们把这个整数减1,那么原来处在整数最右边1就会变为0,原来在1后面的所有的0都会变成1(如果最右边1后面还有0的话)。 * 其余所有将不会受到影响。

    45420

    LeetCode-191.1个数(java)

    二、题目描述 题目:         编写一个函数,输入是一个无符号整数(以二进制串形式),返回其二进制表达式中数字位数为 '1' 个数(也被称为汉明重量)。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 3 中,输入表示有符号整数 -3。...我抱着怀疑慢慢读题看示例,果不其然,还真是,只不过这道题是要你进行 为'1' 进行个数统计。很简单吧?         当然简单啦。...思路2:运算法         其实啊,真正这道题还是考察我们运算基础,题目要求就是将所有为1次数统计出来, 我们可以直接循环挨个判断给定整数 n 二进制每一是否为 1,为1就将count...由k定,因为需要检查n二进制每一,k=32,一共要检查32。 空间复杂度:O(1)。因为我们只需要常数空间保存若干变量,即为O(1)。

    16620

    LeetCode 图解 | 191. 1 个数

    今天分享题目来源于 LeetCode 上第 191 号问题: 1 个数。 题目描述 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1个数(也被称为汉明重量)。...示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入二进制串 00000000000000000000000000001011 中,共有三为 '1...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。 进阶: 如果多次调用这个函数,你将如何优化你算法?...观察一下 n 与 n-1 这两个数二进制表示:对于 n-1个数二进制来说,相对于 n 二进制,它最末位一个 1 会变成 0,最末位一个 1 之后 0 会全部变成 1,其它位相同不变。...空间复杂度:O(1)。 相关题目推荐 LeetCode 190:颠倒二进制 LeetCode 231:2

    52510

    C语言计算整数二进制1个数

    前言 在计算机中存储数据/信息/代码,是以二进制方式存储,所以我们为了更加了解计算运行方式,需要去了解一下关于计算二进制1和0个数方法。...本文是关于C语言中计算整数二进制1个数三个方法。 一、关于一个整数二进制表示方法 整数包括:正整数、负整数、零。...2.移位法 在C语言中,右移运算符(按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位空位补符号,即正数补零,负数补1)可以帮助我们完成计算二进制中1个数。...方法:先将一个整数进行与1与(&),判断结果为1还是0,如果是1则该二进制中1个数1,再右移1;再将其进行按1,判断结果为1还是0,右移1……直到该整数等于0或者已经循环判断32次。...0; } 输出: 32 结果分析: -1计算机中存储方式为反码,它反码是:11111111111111111111111111111111 其中1个数为32。

    56740

    取反计算_c语言按异或运算符

    大家好,又见面了,我是你们朋友全栈君。 今天我在看简明Python指南时候,看到其中一个计算计算问题,它是这样描述: x取反结果为-(x+1) ~5 输出 -6。...,而网上解释说得不太让人明白,自己结合他人解释进行了一番整理,把思路排版出来,供后来者参阅: ---- 首先要明确一点是,计算机内部在做数学运算时(也就是计算0和1运算),都是以补码为标准..._ 5补码是它本身(ps:正数原、反、补码都是它本身;负数原码最高为为1开头,反码是最高符号不变,其余位在原码基础上取反,补码是在反码基础上+1即可得到) 5补码:00000101 ~5...(也就是5按取反运算,下面涉及是补码运算): 00000101按取反,这里需要将原始01串完全反转过来,不存在最高符号概念,取反结果为: 11111010 注意这里结果是用补码表示,毕竟这还是机器表示形式...-6 按取反快捷运算公式 -(x+1),至于这个公式怎样推理出来,这里不作介绍。

    1.3K40

    统计一个数字二进制1个数

    最近一个需求需要使用golang实现一个兼容redis无压缩bitmap,需要提供一个bitcoun函数来统计这个bitmap中二进制1个数,查了一圈并没有找到类似的第三方库,因此决定自己实现一个...问题简化 问题本质实际就是给定一个数字,比如一个二进制数10101101,计算出这个数字中二进制1个数,对于10101101这个数字来说它有5个1,即:10101101 对于这个问题,最简单办法就是挨位数...答案是肯定,而且还不止一种。 2. 查表法 对于一个8数字来说,它只有256个值,因此完全可以预先计算好每个值二进制1个数写入到映射表中,使用时直接查询这张映射表即可。...3.1 2数字二进制1个数 我们先想一下如何计算2数字二进制1个数,答案是非常简单: func OnesCount2(x uint2) int { return (x & 0b01...x >> 2 & 0b0011 } 计算过程如图: 3.3 8数字二进制1个数 8数字计算过程与4计算过程本质是相同,都是拆解组合,伪代码如下: func OnesCount8(x uint8

    9210

    最常见面试算法之 1 个数

    因此它等同于同样长度全零符号串汉明距离。在最为常见数据符号串中,它是 1 个数。 汉明重量是以理查德·卫斯里·汉明名字命名,它在包括信息论、编码理论、密码学等多个领域都有应用。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 3 中,输入表示有符号整数 -3。 二、题解 2.1 循环和位移动 这个方法比较直接。我们遍历数字 32 。...如果某一1 ,将计数器加一。 我们使用掩码来检查数字第 i 。...下面我们来看一个循环次数只与 1 个数有关解法。 2.2 操作小技巧 这里我们介绍一种方法,可以把数字 n 二进制表达式中最右边 1 置为 0。...也比较好理解,当我们对一个数1 的话,比如原来数是 80(01010000),然后减一就会向前借位,直到遇到最右边第一个 1,变成 79(01001111),然后我们把它和原数按与,就会把从原数最右边

    48510

    c语言中运算符_运算符用法

    这些运算符都是对于基本数据类型二进制进行操作,这里我们只讨论整型数据类型运算 二.各个运算符具体使用 >> 右移运算符:将整数二进制形式整体向右移动,移动过后左边缺填充取决于编译器,...26个0)11001 位移后为 1111(26个0)11 结果怎么看都不是-4 实际上在计算位移运算中,正数和负数运算都是使用补码形式运算 正数补码 = 正数原码 负数补码...1^1=0,0^1=11^0=1;0^0=1 ~ 取反运算符 对操作数二进制每一进行,取反1->0,0->1 这两种运算符也是基于补码进行运算 三.运算符具体应用 打印一个数二进制形式...\n"); } 不使用临时变量实现两个数值交换 void swap(int *a,int *b) { *a = (*a)^(*b); *b = (*a)^(*b); *a = (*a)^(*b);...) ) printf("YES\n"); else printf("NO\n"); } return 0 ; } 使用了c语言运算符,在数组一个内存空间中存储32个数字是否存在信息

    82160

    1个数 算法解析

    一、题目 1、算法题目 “编写一个函数,输入是无符号整数,返回其二进制表达式中数字位数为1个数。” 题目链接: 来源:力扣(LeetCode) 链接: 191....1个数 - 力扣(LeetCode) 2、题目描述 编写一个函数,输入是一个无符号整数(以二进制串形式),返回其二进制表达式中数字位数为 '1' 个数(也被称为汉明重量)。  ...二、解题 1、思路分析 这道题是要我们求出二进制串中数字位数为1个数。 可以遍历枚举出给定二进制串中每一是否为1。...在实际代码中,当检查到i时候,可以让n与2i进行与运算,当且n第i1时,运算结果不为0。...需要检查n二进制每一,一共是32。 空间复杂度:O(1) 只需要常量级变量空间。 三、总结 在实现代码过程中使用了一个与运算,判断 第i2i末尾是否为1

    21530
    领券