计算一个整数二进制位中1的个数
2017-07-21 14:32
267 查看
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如8的二进制形式是1000,有1位是1,所以输入8,该函数应该输出1
可以看出这是一道考察位运算的题目。
(1)很简单的思路来判断一个数二进制位是不是1,先判断该数右边一位是否为1,然后将该数右移一位,采用相同逻辑判断是否为1,直到该数为0则停止。判断某位是否为1,我们可以想到很简单的办法就是与上1,判断&1后的结果是否为1。基于这个思路,我们可以很轻松的写出如下代码
可以发现这种解法当遇到负数时,就会陷入死循环
(2)不能将输入的数右移,那我们可以考虑将1不断左移,来判断
可以看出这种解法循环的次数是32次,效率较低
(3)把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变为0,那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。基于这种思路可以写出如下的代码
基于这种思路,循环的次数正好是数据中1的个数,有效减少了循环次数
可以看出这是一道考察位运算的题目。
(1)很简单的思路来判断一个数二进制位是不是1,先判断该数右边一位是否为1,然后将该数右移一位,采用相同逻辑判断是否为1,直到该数为0则停止。判断某位是否为1,我们可以想到很简单的办法就是与上1,判断&1后的结果是否为1。基于这个思路,我们可以很轻松的写出如下代码
可以发现这种解法当遇到负数时,就会陷入死循环
(2)不能将输入的数右移,那我们可以考虑将1不断左移,来判断
可以看出这种解法循环的次数是32次,效率较低
(3)把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变为0,那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。基于这种思路可以写出如下的代码
基于这种思路,循环的次数正好是数据中1的个数,有效减少了循环次数
相关文章推荐
- 17_7_20:计算一个整数二进制位中1的个数。
- 元素出栈、入栈顺序的合法性/计算一个整数二进制位中1的个数。
- 计算一个整数二进制位中1的个数
- C/计算一个整数二进制位中1的个数
- 计算一个整数二进制位中1的个数
- 计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
- day08之元素出栈、入栈顺序的合法性+计算一个整数二进制位中1的个数
- 计算1个数--计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
- 计算一个整数二进制位中1的个数
- 计算一个整数二进制位中1的个数
- 剑指offer 10----计算一个整数二进制位中1的个数
- 【C语言】编写代码实现:求一个整数在内存中的二进制位中1的个数
- 交换两个数组元素以及求一个整数中二进制位的代码
- 计算一个整数有多少个1的函数
- 计算一个整数的各位数之和
- 输入一个整数,计算各个数字之和!
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 作业3-1 .输入一个整数 x,计算并输出下列分段函数 sign(x) 的值
- 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)
- 定义一个结构体变量(包含年月日),写一个函数,计算该日期在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。