IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 位运算总结(一) -> 正文阅读

[C++知识库]位运算总结(一)

位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
注意:位运算是针对二进制的运算,所以手动模拟时要先将数转化为二进制。

常见的位运算

按位与a&b
按位或a|b
按位异或a^b
按位取反~a
左移a<<b
带符号右移a>>b

1、按位与

同位上,有0则0,同1则1;
a: 19? ? b: 10? ? a&b: 2
为方便表示以下每个数只写8位

a00010011
b00001010
a&b00000010

2、按位或

同位上,有1则1,同0则0;
a: 19? ? b: 10? ? a|b: 27

a00010011
b00001010
a|b00011011

3、按位异或

同位上,相同为0,不同为1;
a: 19? ? b: 10? ? a^b: 25

a00010011
b00001010
a^b00011001

4、按位取反

每一位,1变0,0变1;
a: 19? ? ~a: -20
(如果不懂负数的二进制表示看这里)

a00010011
~a11101100

5、左移

每一位左移,右边补零;
a: 19? ? a<<1: 38? ? a<<2: 76

a00010011
a<<100100110
a<<201001100

6、带符号右移

每一位右移,左边补充最高位数(正数补1,负数补0);

正数

a: 19? ? a>>1: 9? ? a>>2: 4

a00010011
a<<100001001
a<<2000000100

负数

a: -19? ? a>>1: -10? ? a>>2: -5

a11101101
a<<111110110
a<<211111011

代码

	int a=19,b=10;
	cout<<"a:19  	b:10     a&b: "<< (a&b) <<endl;
	cout<<"a:19  	b:10     a|b: "<< (a|b) <<endl;
	cout<<"a:19  	b:10     a^b: "<< (a^b) <<endl;
	cout<<"a:19  	~a  :"<< (~a) <<endl;
	cout<<"a:19   	a<<1:"<< (a<<1) <<"   a<<2:"<< (a<<2) <<endl;
	cout<<"a:19   	a>>1:"<< (a>>1) <<"    a>>2:"<< (a>>2) <<endl;
	a=-19;
	cout<<"a:-19  	a>>1:"<< (a>>1) <<"  a>>2:"<< (a>>2) <<endl;

输出

在这里插入图片描述

位运算应用

Acwing 801.二进制中一的个数

原题链接:Acwing 801.二进制中一的个数

题目描述

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

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

输入样例

5
1 2 3 4 5

输出样例

1 1 2 1 2

代码

解法1 yxc’s

#include<iostream>

using namespace std;

int lowbit(int x)
{
	return x&-x; 
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	cin>>n;
	while(n--)
	{
		int x;
		cin>>x;
		int res=0;
		while(x)	x-=lowbit(x),res++;
		cout<<res<<' ';
	}
	return 0;
 } 

解法2

#include<bits/stdc++.h>
using namespace std;

void solve()
{
    int n;
    cin>>n;
    while(n--)
    {
        int x;
        cin>>x;
        
        int res=0;
        while(x)
        {
            if(x&1) res++;
            x=x>>1;
        }
        cout<<res<<" ";
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    solve();
    return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 07:51:17  更:2022-05-08 07:51:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:30:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码