计算十进制数转化成二进制时1的个数
2014-05-15 21:55
211 查看
#include <iostream> using namespace std; int func(int x) { int cnt = 0; while (x) { cnt++; x = x&(x - 1); } return cnt; } int main() { cout << func(9999) << endl << func(8); cin.get(); return 0; }
输出8,1
其实上面那个函数输出结果是:形参x转化为二进制后包含1的个数。
这样考虑:从右向左看,每次while循环,执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,直至x值为0。
如:8的二进制位1000,8-1二进制为0111,它们&的结果直接为0了。
如:二进制101000,减一是100111,它们&结果是100000,然后对100000循环一次就是0,退出了,共累加了2次。
------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
1:由十进制看到二进制并用这样的方法计算其中1的个数真帅!
2:对于负数,C/C++中,非零数表示真(true),零表示假(false),其实也就0的二进制全部是0,所以也会进入循环,并且也是计算其二进制中1的个数。比如func(-1)返回的是32.下面的程序输出4,32.
我的机器int是4字节,32位,-1在机器中表示为1111...........111(共32个),(不确定是不是补码表示法...)
#include <iostream> using namespace std; int func(int x) { int cnt = 0; while (x) { cnt++; x = x&(x - 1); } return cnt; } int main() { cout <<sizeof(int)<<endl<< func(-1); cin.get(); return 0; }
相关文章推荐
- 【c语言】多种方法:将十进制数转化成二进制数,计算其中1的个数
- 计算x转化成二进制包含1的数量
- php面试题一道(计算一个十进制数转二进制后其中‘1’的个数)
- 十进制数转化成二进制后包含一的数量(c++)
- 计算一个十进制数的二进制表示有多少位1
- 计算十进制数转化为2进制数之后中1的个数
- 无聊的测试-计算某数值转化为二进制时 含1的个数
- 实验C—5 任意十进制数转化为二进制
- 格雷码到普通十进制数二进制表示的转化
- 求一个十进制数转化成二进制后bit为0或1的个数
- 输入一个十进制数,转化为二进制
- 格雷码到普通十进制数二进制表示的转化
- js计算字符串的字节数和字符串与二进制的相互转化
- 将十进制数转化为二进制
- leetcode_461. Hamming Distance 计算汉明距离,按位异或运算,计算整数的二进制表示中1的个数 java
- 十进制小数转化为二进制小数
- 其他进制数到十进制数的转化
- 进制转换(大数十进制转化成二进制)
- Java实现表达式计算(中缀表达式转化为后缀表达式/逆波兰式)
- 将一个正整数转化为二进制并用字符串表示输出