一.统计二进制数中1的个数
法1:位操作
#includeint _count_one_bits(int x) { int count = 0; for (int i = 0; i < 32; i++) { if (((x >> i) & 1) == 1) count++; } return count; } int main() { int num; scanf("%d", &num); int ret = _count_one_bits(num); printf("%d", ret); return 0; }
法2:模2除2
注:输入负数整数时须强制转化类型为 (unsigned int)
#includeint _count_one_bits(unsigned int x) { int count = 0; while (x) { if ((x % 2) == 1) count++; x /= 2; } return count; } int main() { int num; scanf("%d", &num); int ret = _count_one_bits(num); printf("%d", ret); return 0; }
法3:n=n&(n-1)
注:此操作可以消去n最右边的一个1
#includeint _count_one_bits(int x) { int count = 0; while (x) { x = x & (x - 1); count++; } return count; } int main() { int num; scanf("%d", &num); int ret = _count_one_bits(num); printf("%d", ret); return 0; }
二.用位操作符交换两个数
#includeint main() { int a, b; scanf("%d%d", &a, &b); a = a ^ b; b = a ^ b; a = a ^ b; printf("%d %d", a, b); return 0; }



