位运算

  • 位运算
  • 常用操作:
  • 1:(x >> k)& 1 取出第x第k位数字
  • 2: lowbit(x),求出x的二进制中最右边1表示的数,例如 10 :1010 ,最右边1表示10代表数字2
 1 #include 
 2 
 3 using namespace std;
 4 
 5 int n;
 6 
 7 //返回 x 的二进制中 最右边的 1 和 之后的 0 代表的数
 8 int lowbit_1(int x){
 9     return x & -x; 
10 }
11 
12 //求二进制中 1 的个数
13 int main(){
14     cin >> n;
15     int res = 0;
16     while(n--){
17         int x;
18         cin >> x;
19         
20         while(x) x -= lowbit_1(x), ++res;//每次把最右边的 1 减掉
21         cout << res  << " ";
22         res = 0;
23     }
24 }
View Code

原码:二进制

反码:取反

补码:取反 + 1

负数在计算机中 是补码,

x & -x  == x & (~x + 1),可知lowbit

  • end

你可能感兴趣的:(位运算)