一,题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
二,分析:
这是一道很基本的考查位运算的面试题。
菜鸟思考:利用除法,和取余运算计算出10进制数的二进制表示后,统计1的个数
三,代码
自己测试代码(感觉没问题)
查询各方资料,多次杀死脑细胞后,发现:如果为负数的话将导致错误发生
改进后:
四,升级版(除法的效率比移位运算要低的多,)
先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。
这样每次移动一位,直到这个整数变成0为止。现在的问题变成怎样判断一个整数的最右边一位是不是1了。很简单,如果它和整数1作与运算。由于1除了最右边一位以外,其他所有位都为0。因此如果与运算的结果为1,表示整数的最右边一位是1,否则是0。
得到的代码如下:
在实际编程中如果可以应尽可能地用移位运算符代替乘除法。
这个思路当输入i是正数时没有问题,但当输入的i是一个负数时,不但不能得到正确的1的个数,还将导致死循环。以负数0x80000000为例,右移一位的时候,并不是简单地把最高位的1移到第二位变成0x40000000,而是0xC0000000。这是因为移位前是个负数,仍然要保证移位后是个负数,因此移位后的最高位会设为1。如果一直做右移运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。为了避免死循环,我们可以不右移输入的数字i。首先i和1做与运算,判断i的最低位是不是为1。接着把1左移一位得到2,再和i做与运算,就能判断i的次高位是不是1……这样反复左移,每次都能判断i的其中一位是不是1。基于此,我们得到如下代码:
分享到:
相关推荐
进制的万能公式是:\( (n)_{10} = \sum\limits_{i=0}^{k}d_i \times 2^i \),其中\( n \)是十进制数,\( d_i \)是二进制数中第\( i \)位的数码,\( k \)是数码的个数。这个公式适用于任何整数或小数的转换,只需将十...
第十题 二进制中1的个数 测试10 第十一题 数值的整数次方 测试11 第十二题 打印1到最大的n晚数 测试12 第十三题 O(1)时间删除链表节点 测试13 第十四题 使数据库中的奇数位于偶数前面 测试14 第十五题 找链表中倒数...
8. **是非判断题**:这部分测试对计算机基础知识的理解,如第三代计算机出现了操作系统,不同计算机的指令系统不相同,bit代表二进制位而不是字节,八进制数中不包含数字8,汉字国标码GB2312-80包含6763个常用汉字等...
4. 进制转换:十进制数100对应的二进制是1100100,八进制是144,十六进制是64。 5. 无线电波:微波是一种高频电磁波,波长短,不易穿过建筑物,但用于移动通信和高清电视信号传输。 6. 摩尔定律:单块集成电路的...
面试题15:二进制中1的个数 面试题16:数值的整数次方 面试题17:打印从1到最大的n位数 面试题18:删除链表的节点 面试题19:正则表达式匹配 面试题20:表示数值的字符串 面试题21:调整数组顺序使奇数位于偶数前面 ...
14. 二进制中1的个数统计:编写代码统计一个非负整数的二进制表示中1的个数。 15. 数据结构的识别:根据给定操作序列,判断使用的是哪种数据结构。 问题求解部分: 1. 逻辑推理:根据四个人的郊游条件,逻辑推理...
22.计算二进制表示中1的个数 23.第N个四面体数 24.某区间内的偶数 25.求前n个奇数 26.求第N个斐波那契数 27.翻转句子单词 28.返回字典的键值 29.计算字符串中的音节数 30.格式化数字 31.最小公倍数
在计算机内部,数据是以二进制形式存储的,而我们通常使用的十进制、八进制、十六进制则是方便人理解的表示方式。下面我们将深入探讨这些概念。 首先,数的表示分为数码、基和权三个要素。数码是指构成数的基本符号...
2. 基数:数制中数码的个数,如十进制基数为10,二进制基数为2,八进制基数为8,十六进制基数为16。 3. 数位:数码在数中的位置,如十进制数1234.56中,'1'处于千位,'2'处于百位,'3'处于十位,'4'处于个位,...
17. 最大的10位无符号二进制整数是1111111111,转换为十进制是1023,第十八题答案是C。 18. BCD码101000111表示的负数是-47,第十九题答案是B。 19. 二进制数1001101.011对应的十六进制数为95.5,第二十题答案是C...
1. 位操作:题目第11题涉及到二进制表示,计算在二进制表示中将一个数转化为全1需要的操作次数。这个问题是关于位操作和二进制计数的,计算方法是原始位数加上1的个数减去1。 2. 数据结构:第16题关于结构体的内存...
1. 数制:计算机中最常用的是二进制、八进制、十进制和十六进制。例如,(1011.01)表示二进制数,(752.34)表示八进制数,(368.258)表示十进制数,(BD2.3C)表示十六进制数。转换通常通过按权展开法完成,例如,(2A.8)H...
* 题目描述:输入一个十进制正整数n,写下从 1 到 n 的所有整数,然后数一下其中出现的数字 1 的个数。 * 输入格式:一个整数n。 * 输出格式:一个整数,即数字 1 的个数。 * 样例输入:12 * 样例输出:5 这道题目...
10016 十进制转换二进制 46 10017 递归函数程序设计求Fabonacci数列 48 10019 改错题error10_1.cpp 49 10022 编程题 50 10026 指定位置输出字符串 50 10027 藏尾诗 51 10028 改错题error11_2.cpp 52 40065 分解质...
11. 补码表示:1个字节的二进制整数,4个1和4个0,表示的最小负整数是-121。 12. 进制运算:1023-377Q+100H的结果是746H。 13. 数据溢出:两个异号的数相加或相减可能导致溢出。 14. 最大整数:无符号整数中,...
- 题14中要求参赛者计算一个数的二进制表示中含有1的数量,这需要对二进制数和位运算有一定了解。 7. 程序编写: - 题3的阅读程序写结果部分,要求参赛者根据给定的C++代码理解其功能并预测输出结果。给定代码中...
14. 位运算:统计非负整数二进制表示中1的个数,可以使用位操作技巧,如右移操作(x >>= 1)。 15. 数据结构:根据给出的操作序列,可以判断使用的是栈,因为栈具有后进先出(LIFO)的特性。 16. 逻辑推理:这是...
-12的二进制表示为11110100(其中第一位为符号位)。 - **反码:** 对于负数来说,原码除了符号位外,其他位取反(0变为1,1变为0)。因此,-12的反码为10001011。 - **补码:** 对于负数来说,先求出反码,再对反码...
如题中所示,用8位补码表示十进制整数12,其补码的十六进制表示是0CH。这种转换通常需要将十进制转换为二进制,再转换为补码形式,最后转为十六进制。 3. 补码的性质:补码由3个1和5个0组成,可以判断其最大值和...
在本文中,我们将深入探讨计算机基础知识的第二章内容,包括信息的表示、存储与运算,以及计算机系统和计算机信息系统的相关知识。 首先,我们必须了解计算机中信息的分类。在计算机内部,所有信息可以被分为两类:...