17.二进制中1的个数

17.二进制中1的个数

 位运算:

第一个操作。

n的二进制表示中第k位数字是几

这里的第k位指的是,从右往左第0位,第1位,第2位

1:先把第k位数字移到最后一位 n>>k

2:看个位是几 x&1

结合起来就是n>>k&1

17.二进制中1的个数

 第二个操作:

lowbit操作

lowbit(x)的作用是返回x的最后一位1

比如x=1010,那么lowbit(x) = 10,等于2

x=101000,lowbit(x) = 1000

lowbit返回的是一个二进制数,这个二进制数的头一位1是原数的最后一位1

lowbit是怎么实现的

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

计算机数字运算均是基于补码的。

-x = ~x + 1这句话是针对补码而言的

负x等于取反x加1

17.二进制中1的个数

17.二进制中1的个数

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main() {
 4     int n = 10;
 5     unsigned int x = -n;
 6     for (int i = 31; i >= 0; i--) {
 7         cout << (x >> i & 1);
 8     }
 9     return 0;
10 }

 应用:统计x里面1的个数

思想就是每次把最后一位1去掉

当x等于0的时候,就没有1了

减了多少次,就有几个1

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int lowbit(int x) {
 4     return x & -x;
 5 }
 6 int main() {
 7     int n;
 8     cin >> n;
 9     while (n--) {
10         int x;
11         cin >> x;
12         int res = 0;
13         while (x) {
14             x -= lowbit(x);
15             res++;
16         }
17         cout << res << " ";
18     }    
19     return 0;
20 }

 

原文链接: https://www.cnblogs.com/fx1998/p/12826831.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    17.二进制中1的个数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/360760

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午1:29
下一篇 2023年3月2日 下午1:29

相关推荐