8、二进制表示的数中1的个数
2018-03-26 19:35
113 查看
题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法:
利用二进制方法。n = n & (n-1) ,得到n用二进制表示后,去掉最低位的1的数字。eg: n= 1111 0001 0000 ,经过上式后n=1111 0000 0000;
代码如下: int NumberOf1(int n) {
if(n==0)
return 0;
int count = 0;
while(n!=0)
{
count++;
n = n &(n-1);// 去除 二进制表示中 最低位的1
}
return count;
}
拓展:
根据 公式 n = n & (n-1) 可以去掉最后一个二进制表示的1,可解决下列问题1、一句话判断某个数字是否为2的整数次方。 因为2的整数次方的数在二进制表达中,只有某一项为1,利用n = n & (n-1) 可以得到0.
2、判断两个用二进制表达的整数m和n,需要改变m的二进制表达多少位才能得到n。
eg:m=10 -> 1010 , n =13 ->1101 ,需要改变3位。 直接计算m^n得到的二进制表达中1的个数。转换成题述问题。
相关文章推荐
- 将一个整数的二进制表示的奇数位与偶数位交换位置
- 2.2题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
- 整数的二进制表示中'1'的个数
- 如何求一个数的二进制表示中1的个数
- 温故知新之数据类型二进制表示
- 计算机数据的表示基础知识——二进制
- 整数的二进制表示中包含多少个1
- C/C++二进制、十进制、十六进制的表示方法
- 0.1在计算机中不能被精确表示(浮点数的陷阱其实也是二进制下的陷阱?)
- 十进制1至100的二进制表示
- 浮点数的二进制表示
- 数值的八进制、十六进制表示,及以二进制进行显示
- 浮点数的二进制表示
- 不要被阶乘吓倒(二进制表示中最低位1的位置 )
- 负数的二进制表示方法
- 位运算之求整数二进制表示中1的个数
- 【C++专题】数值二进制表示、补码、反码、有符号数、无符号数、小数、有符号数的扩展
- 浮点数的二进制表示学习笔记
- 几种统计整数二进制表示中1的个数(算法小学习)
- 位运算训练04—输入一个整数a,再输入两个整数p(p<32),v(0|1);将该整数a的p位设置为v,输出修改后的该整数的二进制表示