码迷,mamicode.com
首页 > 其他好文 > 详细

位运算

时间:2020-05-15 19:46:05      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:ios   bit   return   位运算   作用   stream   ++   for   树状   

一、位运算常用的两种操作:

(1) 求n的第k位数字:n >> k & 1

(2) 返回n的最后一位1:lowbit(n) =n & -n

二、求n的第k位数字:n >> k & 1

n =15 (1111)2 : 先把第k位移到最后一位 n >> k, 看个位是几 x & 1, n >> k & 1

具体实现:

#include<iostream>

using namespace std;

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

三、lowbit是树状数组的基本操作

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

(1) x = 1010 lowbit(x) = 10

(2) x = 101000 lowbit(x) = 1000

2. lowbit(x) 的实现过程:

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

-x = ~x + 1

x = 1010 ....10000

~x = 0101 ....01111

~x + 1 = 0101 ....10000

x & (~x + 1) = 0000 ....10000

3. lowbit(x)的应用:求二进制中 1 的个数

具体实现:

#include <iostream>

using namespace std;

int lowbit(int x)
{
	return x & -x;
}
int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		int x;
		cin >> x;
		int res = 0;
		while(x) x -= lowbit(x), res++;//每次减去x的最后一位1
		cout << res <<endl;
	}
	return 0;
}

位运算

标签:ios   bit   return   位运算   作用   stream   ++   for   树状   

原文地址:https://www.cnblogs.com/lastk/p/12896553.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!