如何用位运算比较二进制数中1和0的个数
遇到一道题,要确定的一个数的二进制表示中1多还是0多,见识了位运算的神奇之后就纠结这道题能不能用位运算……

酱油实习生
#include <stdio.h> int n; int main() { scanf("%d",&n); n=(n & 0x55555555)+((n>>1) & 0x55555555); n=(n & 0x33333333)+((n>>2) & 0x33333333); n=(n & 0x0F0F0F0F)+((n>>4) & 0x0F0F0F0F); n=(n & 0x00FF00FF)+((n>>8) & 0x00FF00FF); n=(n & 0x0000FFFF)+((n>>16) & 0x0000FFFF); printf("%d\n",n); system("pause"); }
#include <cstdio> #include <conio.h> void main(void) { while (true) { int value(0); printf_s("请输入整数(以0终结):"); if (scanf_s("%d", &value) > 0) { printf_s("\n输入: %d ", value); if (value == 0) { break; } printf_s("二进制: "); bool begin(false); unsigned int n(0x80000000); size_t count1(0); size_t count2(0); for (size_t i = 0; i < sizeof(int) * 8; ++i) { int ch((value & n) == n ? '1' : '0'); if (!begin && (ch == '1')) { begin = true; } if (begin) { putchar(ch); (ch == '1') ? ++count1 : ++count2; } n >>= 1; } printf_s(" 共%d个'1' %d个'0'", count1, count2); putchar('\n'); } else { printf_s("\n非法数据!"); break; } } printf_s("\n按任意键结束..."); _getch(); }