位运算之求整数二进制表示中1的个数
2017-07-06 21:10
211 查看
题目要求;输入一个整数,求这个整数二进制表示中1的个数。
这是一道位运算的题目,首先位运算有下面几种。
1 按位与 &
2 按位或 |
3 按位异或 ^
4 按位取反 ~
5 左移 <<
6 右移 >>
这个题目的思路是,把这个整数与1进行按位与运算,如果为1则证明最后一位为1,循环32次,检查这个整数的各个位,并作统计
方法一:
int NumOf11(int n)
{
unsigned int num = (unsigned int)n;
//强转成unsigned int,因为负数右移高位补1,会引起死循环
int count = 0;
while (num)
{
if (num&1)
count++;
num = num >> 1;
}
return count;
}注意这个题目,负数右移时存在补位问题,最后变为全1,发生死循环
方法二:换一种思路,把1左移
//把1左移,然后和数字做&运算
int NumOf12(int n)
{
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (n & flag)
count++;
flag = flag << 1;
}
return count;
}
方法三:
首先看一个规律,x & (x-1)结果把x最右边一个1变为0,整数中有几个1就能进行几次运算,直到整数变为0
这是一个不容易想到的方法,优点是不用把全部位数都检查一遍
//解法三
//x & (x-1) 的结果是把数字x最右边一位变成0
//例如 11001011 & 11001010 = 11001010,数字中有几个1,做几次循环
//前两种运算要进行32此循环,每一位都要判断
int NumOf13(int n)
{
int count = 0;
while (n)
{
count++;
n = n & (n-1);
}
return count;
}
这是一道位运算的题目,首先位运算有下面几种。
1 按位与 &
2 按位或 |
3 按位异或 ^
4 按位取反 ~
5 左移 <<
6 右移 >>
这个题目的思路是,把这个整数与1进行按位与运算,如果为1则证明最后一位为1,循环32次,检查这个整数的各个位,并作统计
方法一:
int NumOf11(int n)
{
unsigned int num = (unsigned int)n;
//强转成unsigned int,因为负数右移高位补1,会引起死循环
int count = 0;
while (num)
{
if (num&1)
count++;
num = num >> 1;
}
return count;
}注意这个题目,负数右移时存在补位问题,最后变为全1,发生死循环
方法二:换一种思路,把1左移
//把1左移,然后和数字做&运算
int NumOf12(int n)
{
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (n & flag)
count++;
flag = flag << 1;
}
return count;
}
方法三:
首先看一个规律,x & (x-1)结果把x最右边一个1变为0,整数中有几个1就能进行几次运算,直到整数变为0
这是一个不容易想到的方法,优点是不用把全部位数都检查一遍
//解法三
//x & (x-1) 的结果是把数字x最右边一位变成0
//例如 11001011 & 11001010 = 11001010,数字中有几个1,做几次循环
//前两种运算要进行32此循环,每一位都要判断
int NumOf13(int n)
{
int count = 0;
while (n)
{
count++;
n = n & (n-1);
}
return count;
}
相关文章推荐
- 位运算训练03—输入一个整数a,再输入两个整数p1,p2(p1,p2<32);将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
- 位运算训练04—输入一个整数a,再输入两个整数p(p<32),v(0|1);将该整数a的p位设置为v,输出修改后的该整数的二进制表示
- 位运算--一个整数的二进制表示中1的个数
- leetcode_461. Hamming Distance 计算汉明距离,按位异或运算,计算整数的二进制表示中1的个数 java
- 28.整数的二进制表示中1的个数(运算)
- Q28、整数的二进制表示中 1 的个数(运算)
- [转载] C++位运算:将一个4字节整数的二进制表示中的001替换为011
- C语言位运算应用一:求一个数的二进制表示中1的个数
- Java打印整数的二进制表示(代码与解析)
- 【练习】整数的二进制表示中1 的个数
- 交换一个整数二进制表示中的奇数位和偶数位
- 整数n的二进制表示中所含1的个数
- 快速计算整数的二进制表示法中1的个数
- 整数A和B的二进制表示中有多少位不同
- 微软100题(28)整数的二进制表示中1的个数
- 输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
- 整数与浮点数的二进制表示方式 分类: C/C++ 2015-06-13 15:45 54人阅读 评论(0) 收藏
- 如何求整数A和B的二进制表示中有多少位不同?
- 快速计算整数的二进制表示法中1的个数
- 计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王: