首页 > 试题广场 >

二进制中1的个数

[编程题]二进制中1的个数
  • 热度指数:855013 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。

数据范围:
即范围为:
示例1

输入

10

输出

2

说明

十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1。       
示例2

输入

-1

输出

32

说明

负数使用补码表示 ,-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111,其中32个1    
头像 牛客题解官
发表于 2020-05-29 15:05:13
精华题解 题目的主要信息: 统计32位整型有符号数二进制中1的个数 因负数用补码表示,故不能用连除法 举一反三: 学习完本题的思路你可以解决如下题目: JZ64. 求1+2+3+...+n JZ65. 不用加减乘除做加法 方法一:循环按位比较法(推荐使用) 知识点:位运算 计算机的数字由二进制表示,我们平 展开全文
头像 Maokt
发表于 2021-06-23 09:17:02
精华题解 算法思路一:位运算右移 解题思路: 判断 n 最右一位是否为 11 ,根据结果计数。将 n 右移一位(本题要求把数字 n 看作无符号数,因此使用 无符号右移 操作) 算法流程: 初 展开全文
头像 大菠萝侦探
发表于 2021-06-19 17:34:05
精华题解 方法一:检查二进制每一位数字 我们通过右移操作消除第 i 位右边的数字,通过与 1 操作消除第 i 位左边的所有数字,对数字 n 重复32次这种操作就可以求得每一位的数字。当我们要提取从右往左数第3位数字时:c++代码如下: class Solution { public: int Nu 展开全文
头像 开车的阿Q
发表于 2021-06-19 18:54:47
精华题解 描述 这是一篇面对初级coder的题解。 知识点:二进制基础知识,位运算操作 难度:一星 题解 题目:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 本题主要考察计算机数据存储的基本知识 首先是对于正数 考的是二进制到十进制的转化 我们平时的数 展开全文
头像 枫叶零渡
发表于 2021-06-30 16:55:06
精华题解 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示示例:输入:10返回:2 我们发现将10 转成二进制为1010,按照题目的描述,表示1的个数有2个,所以返回2 这时我们自定义输入个数:15,看看二进制结果是多少? 返回1的个数的结果应该是4,为什么输入10 的二进制是1 展开全文
头像 WEHAWT
发表于 2019-09-12 12:47:09
链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8?f=discussion来源:牛客网 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 (搬运评论区大佬的解释)如果一个整数不为 展开全文
头像 Fzccc
发表于 2019-12-22 11:16:27
傻子方法来一个:1、先将数字转换成二进制字符串2、用String.split()函数存入一个数组中3、遍历数组跟1比较,同时计数4、输出计数值 public class Solution { public int NumberOf1(int n) { String s=In 展开全文
头像 中工升达预备毕业生
发表于 2019-09-03 11:40:24
在机器中,整数的存储和运算都是其补码表示的。 正数右移:保持为正数,相当于/2。 负数右移:保持为负数,移位前是负数,移位后保持是负数,因此移位后最高位设为1。如果一直右移,最终会变成-1,即(-1)>>1是-1。 正数左移:不保持为正数,相当于*2。(注意:1左移31时为负数最大 展开全文
头像 少一块星空
发表于 2020-01-03 16:21:11
python中首先明确一点就是二进制没有位数的概念,所以也就无法获得负数真实表示方法 n = -3 n = n & 0xffffffff #n=4294967293 bin(n)#查看二进制形式:'0b11111111 展开全文
头像 把牛妹带回家
发表于 2019-07-26 15:48:26
二进制计算 显然,一个很简单的思路是一个一个数 class Solution: def NumberOf1(self, n): # write code here if n<0: n=n&0xffffffff 展开全文
头像 码bug的小砖家
发表于 2019-08-06 00:32:43
public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ count += (n & 1); //每次判断最低位是否为 展开全文
头像 mtgo666
发表于 2022-02-21 15:02:58
基础知识 负数在计算机中是用补码来存储的,由于正数的补码就是原码,姑可以推广到所有的数在计算机中都是用补码来存储的。 原码:就是数的二进制形式。负数的原码最高位是1,代表符号位。 反码:正数的反码还是其本身,负数的反码是在原码的基础上,符号位不变,其余位按位取反。 补码:正数的补码还是其本身,负数 展开全文
头像 道阻且长z
发表于 2019-09-25 00:14:19
思路: 1.利用一个结论:一个二进制数n减1后与原二进制数进行&运算( 即n&(n-1) )会消去最右边的1。2.这个结论怎么来的? 假设二进制数101进行减1运算,刚好最右边是1,则得到100,此时用100跟101做&运算,得到的是100,故消去了101左右边的1。 10 展开全文
头像 心谭
发表于 2019-12-31 22:26:44
【2种解法】【JavaScript题解】【剑指offer】 题目描述 输入一个整数,输出该数二进制表示中 1 的个数。其中负数用补码表示。 专注前端与算法的系列干货分享,欢迎关注(¬‿¬):「微信公众号:心谭博客」| xxoo521.com | GitHub 解法 1: 判断每一位 依次判断数字 展开全文
头像 宫水三叶的刷题日记
发表于 2021-07-26 15:12:14
「位数检查」解法 一个朴素的做法是,对 int 的每一位进行检查,并统计 的个数。 代码: public class Solution { public int NumberOf1(int n) { int ans = 0; for (int i = 0; 展开全文

问题信息

难度:
1746条回答 228501浏览

热门推荐

通过挑战的用户

查看代码