摘要:题目输入一个整数,输出该数二进制表示中的个数。其中负数用补码表示。二进制与运算符符号为,表示若两个二进制位都为,则结果为,否则为。所以用于比较的这个数字初始值为,比较完后让左移位,这样就可以依次比较所有位是否为。
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
分析这是一道考察二进制的题目
二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1。
二进制与运算符(and):符号为&,表示若两个二进制位都为1,则结果为1,否则为0。
二进制否运算符(not):符号为~,表示对一个二进制位取反。
异或运算符(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0
左移运算符m << n 表示把m左移n位,左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0,比如:
00001010<<2 = 00101000
右移运算符m >> n 表示把m右移n位,右移n位的时候,最右边的n位将被丢弃,同时在最左边补上n个0,比如:
00001010>>2 = 00000010
我们可以让目标数字和一个数字做与运算
这个用户比较的数字必须只有一位是1其他位是0,这样就可以知道目标数字的这一位是否为0。
所以用于比较的这个数字初始值为1,比较完后让1左移1位,这样就可以依次比较所有位是否为1。
代码function NumberOf1(n) { let flag = 1; let count = 0; while(flag){ if(flag & n){ count++; } flag = flag << 1; } return count; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/101249.html
摘要:问题描述输入一个整数,输出该数二进制表示中的个数。其中负数用补码表示。思路方法将二进制变成字符数组,遍历数组统计的个数,这种办法不需要考虑正负数。遍历字符数组,统计的个数判断该位是否是,如果是就,否则执行下一次循环。的二进制表示想右移一位。 1.问题描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 2.思路 方法1:将二进制变成字符数组,遍历数组统计1的个数,这...
摘要:图解第二种算法图解代码示例算法如果为真,说明拿到的是二进制序列的个数为算法为的时候说明已经拿完了,循环终止二进制序列中的个数以上代码,还可做优化在此仅作参考,若有更好的算法,还望能够私信告知,多谢各位。 ✨前言✨: 算法是一个程序员的内功,能很好的体现程序员的编程思维,通过学习和掌握常见的算...
摘要:导航小助手剑指从尾到头打印链表题目详情解题思路源代码总结剑指从尾到头打印链表题目详情输入一个链表的头节点,从尾到头反过来返回每个节点的值用数组返回。时间复杂度方法先反转链表并求长度,在将反转后的链表数据拷贝至数组中。 ...
摘要:剑指系列刷题第一篇题目来源数组中数字出现的次数大家可以去测试一下自己的代码博主码云链接文章目录前言题目描述解题思路解题代码前言这是剑指系列刷题第一篇文章,大家可以互相学习一下。其中的两个单身狗是和。 ...
阅读 2278·2021-11-11 16:54
阅读 2538·2021-09-26 09:47
阅读 3922·2021-09-08 09:36
阅读 2687·2021-07-25 21:37
阅读 882·2019-08-30 15:54
阅读 2515·2019-08-30 14:22
阅读 3225·2019-08-30 13:57
阅读 2474·2019-08-29 17:17