标签:位运算 str space mes 自己 一个 没有 i++ 加法
先把这个数字移动k位
然后再判断个位是什么
x = 101010 最后一位1
~x = 010101 最后一位1
~x + 1 就会导致最后一位0变成1,然后全部都被取出来了
-x就是x的补码
补码就是~x+1
原数字找到最后一个1,找到把左边的数全部取反
原码就是自己
反码就是全部取反
补码是~x + 1
底层实现是没有减法的。用加法来做减法
\(x + (-x) = 0\)
\((-x) = 0 - x\)
\((-x) = 0 - x\)等于32位0减去x
其实就是借了一位再减x
#include<cstdio>
#include<iostream>
using namespace std;
int lowbit(int x)
{
return x & -x;
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
int x;
int res = 0;
cin >> x;
while(x) x -= lowbit(x), res++;
cout << res << " ";
}
return 0;
}
标签:位运算 str space mes 自己 一个 没有 i++ 加法
原文地址:https://www.cnblogs.com/WalterJ726/p/12377293.html