位运算膜法
Posted walterj726
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算膜法相关的知识,希望对你有一定的参考价值。
n的第k位数是几
先把这个数字移动k位
然后再判断个位是什么
lowbit(x)是返回最后的一位1
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
二进制中1的个数
#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;
}
以上是关于位运算膜法的主要内容,如果未能解决你的问题,请参考以下文章