【13. 二进制中1的个数、位运算】

简介: ## 位运算>n 的 二进制表示中第K位是几>>n = 15 = (1111)<sub>2</sub>>1. 先把第K位移动到最后一位 n >> k>2. 看个位是几 x & 1>>(1)和(2)操作合并 `n >> k & 1`

位运算

n 的 二进制表示中第K位是几

n = 15 = (1111)2

  1. 先把第K位移动到最后一位 n >> k
  2. 看个位是几 x & 1

(1)和(2)操作合并 n >> k & 1

代码

#include <iostream>
using namespace std;

int main()
{
   int n = 10;
   for (int k = 3; k >=0; k --) cout << (n >> k & 1);
   return 0;
}

lowbit(x) :返回x的最后一位1

x & -x = x &(~x + 1)

  • 在c ++中,一个整数的求反,就是这个数的反码在加1;

作用:统计x中1的个数1661150910021.png

题目

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围

1 ≤ n ≤ 100000
0 ≤数 列中元素的值 ≤ 109

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2

代码

#include <iostream>
using namespace std;

int n;
int lowbit(int x)
{
   return x & -x;
}
int main()
{
   cin >> n;
   while (n --)
   {
       int x;
       cin >> x;
       int res = 0;
       while (x) x -= lowbit(x), res ++;
       cout << res << " ";
       
   }
   return 0;
}
目录
相关文章
|
6月前
二进制中1的个数
二进制中1的个数
36 0
|
5月前
|
C语言
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
|
6月前
|
C++
Acwing.26 二进制中1的个数
Acwing.26 二进制中1的个数
|
C语言
C语言:求两个数二进制中不同位的个数
思路: 总体思路: 把 m 异或 n 后,有几个相异就有几个1,再计算下二进制有几个1即可 (1). 编写函数:number_of_1() ,计算二进制中有几个1。 (2). 在主函数中,把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数
C语言:求两个数二进制中不同位的个数
|
存储 算法 C语言
C语言/计算整数二进制位中的1的个数
C语言/计算整数二进制位中的1的个数
|
6月前
|
C语言
[C语言][题]获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
[C语言][题]获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
46 0
|
6月前
|
算法 Python
计算32位二进制整数中1的个数(包括负数补码)
计算32位二进制整数中1的个数(包括负数补码)
115 0
剑指offer_位运算---二进制中1的个数
剑指offer_位运算---二进制中1的个数
50 0
【C语言】输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂