常见位运算总结

 个人主页:Lei宝啊 

愿所有美好如期而遇 


 

目录

前言

1.基础位运算

&运算

|运算

^运算

>>运算

<<运算

~运算

2.给一个数n,确定他的二进制表示中的第x位,是0还是1

3.将一个数n的二进制表示的第x位修改成1

4.将一个数n的二进制表示的第x位修改成0

5.位图的思想

6.提取一个数n二进制表示中最右侧的1

7.干掉一个数n二进制表示中最右侧的1

8.位运算的优先级

9.异或运算的运算律


前言

在开始本篇文章时,建议了解 原码,反码,补码以及计算

1.基础位运算

&运算

按照补码进行按位与

  • 0 & 0 = 0  
  • 0 & 1 = 0
  • 1 & 1 = 1 
|运算

按照补码进行按位或

  • 0 | 0 = 0
  • 1 | 0 = 1
  • 1 | 1 = 1
^运算
  • 按位异或,相同为0,不同为1
  • 不进位相加

 按照补码进行按位异或

  • 0 ^ 0 = 0
  • 0 ^ 1 = 1
  • 1 ^ 1 = 0 
>>运算

每向右移动一位,相当于除以2 

<<运算

每向左移动一位,相当于乘以2  

~运算

每个比特位按位取反。

2.给一个数n,确定他的二进制表示中的第x位,是0还是1

#include <iostream>
using namespace std;

//给一个数n,确定他的二进制表示中的第x位,是0还是1
int main()
{

	int n, x;
	//cin >> n >> x;
	
	//000101000000111011011000
	n = 1314520;
	x = 6;

	cout << (1 & (n >> (x - 1))) << endl;

	return 0;
}

3.将一个数n的二进制表示的第x位修改成1

#include <iostream>
using namespace std;

//将一个数n的二进制表示的第x位修改成1
int main()
{

	int n, x;
	//cin >> n >> x;

	//000101000000111011011000
	n = 1314520;
	x = 6;

	n |= 1 << (x - 1);
	cout << n;

	return 0;
}

 

4.将一个数n的二进制表示的第x位修改成0

#include <iostream>
using namespace std;

//将一个数n的二进制表示的第x位修改成0
int main()
{

	int n, x;
	//cin >> n >> x;

	//000101000000111011011000
	n = 1314520;
	x = 7;

	n &= ~(1 << (x - 1));
	cout << n;

	return 0;
}

 

5.位图的思想

用一个变量的某个比特位表示某种状态,0表示假,1表示真,我们看图:

在进程的切换与调度中,底层就使用位图去标识运行队列是否为空,还有一个就是Linux下文件类系统调用中,有一个open系统调用,他的第二个参数flags,都是利用了位图。

6.提取一个数n二进制表示中最右侧的1

#include <iostream>
using namespace std;

//提取一个数n二进制表示中最右侧的1
int main()
{
	int n, x;
	//cin >> n >> x;

	//000101000000111011011000   n
	//111010111111000100101000  -n
 	n = 1314520;
	x = 7;

	n &= -n;
	cout << n;

	return 0;
}

 

-n:n二进制表示中,最右边1的左边二进制数全部取反。

7.干掉一个数n二进制表示中最右侧的1

#include <iostream>
using namespace std;

//干掉一个数n二进制表示中最右侧的1
int main()
{

	int n, x;
	//cin >> n >> x;

	//000101000000111011011000   n
	//111010111111000100101000  -n
 	n = 1314520;
	x = 7;

    //000000000000000000001000  n & -n
	n ^= n & -n;
	cout << n;

	return 0;
}

 

#include <iostream>
using namespace std;

//干掉一个数n二进制表示中最右侧的1
int main()
{

	int n, x;
	//cin >> n >> x;

	//000101000000111011011000   n
 	n = 1314520;
	x = 7;

	n &= n - 1;
	cout << n;

	return 0;
}

 n-1 :最右边的1及其右边全部取反

8.位运算的优先级

这里推荐,如果使用位运算,不确定优先级,那么就加括号。

9.异或运算的运算律

  • a ^ 0 = a
  • a ^ a = 0
  • a ^ b ^ c = a ^ (b ^ c)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/292539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jupyter更改默认路径到其它的目录或者到其它的盘 比如D盘

1.打开终端 输入jupyter notebook --generate-config 如下 2.在C:\Users\mb5958\.jupyter路径下 3.用记事本打开它&#xff0c;搜索directory 4.在你想要的路径下新建一个文件夹&#xff0c;如‘D:\jupyterFile’&#xff0c;然后将路径名放在c.NotebookApp.notebook_dir"…

深入了解 Vite:快速、简洁、高效的前端构建工具(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

HackTheBox - Medium - Linux - BroScience

BroScience BroScience 是一款中等难度的 Linux 机器&#xff0c;其特点是 Web 应用程序容易受到“LFI”的攻击。通过读取目标上的任意文件的能力&#xff0c;攻击者可以深入了解帐户激活码的生成方式&#xff0c;从而能够创建一组可能有效的令牌来激活新创建的帐户。登录后&a…

鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

在应用/元服务早期使用过程中&#xff0c;-Serverless账户验证码的格式是[AGC][应用/元服务名称]&#xff0c;如下图。 但是&#xff0c;在最近&#xff0c;[应用/元服务]名称直接变成了【default】,用户收到这种验证码后&#xff0c;心里存有疑虑的&#xff0c;这是哪里配置…

【Spring】16 ApplicationContextAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架提供了许多回调接口&#xff0c;用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一&#xff0c;它允许 Bean 获取对 A…

Python-1-字符串类型及方法

众所周知&#xff0c;Python面向对象&#xff0c;功能强大 | ू•ૅω•́)ᵎᵎᵎ

常见的并查集题目

总结 并查集逻辑实现的优化有两种&#xff0c;第一种是查找时路径压缩&#xff0c;第二种是按秩合并&#xff0c;合并时将高度较小的树作为较高树的子树,从代码量来看&#xff0c;推荐使用路径压缩&#xff0c;可以参考lc 547. 省份数量的两种UnionFind写法 题目 1 LC990. 等…

气膜篮球馆——智能场馆助力篮球梦想

篮球&#xff0c;作为青少年热爱的运动之一&#xff0c;不仅锻炼身体、塑造良好体态&#xff0c;更为结交朋友提供了丰富机会。如今&#xff0c;随着气膜篮球馆的兴起&#xff0c;这一运动在智能场馆中展现出更为舒适的一面&#xff0c;为篮球梦想的实现提供了强大助力。 随着人…

c语言:用结构体求平均分|练习题

一、题目 用c语言的结构体&#xff0c;求4位学生成绩的平均分 如图&#xff1a; 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> float aver();//声明平均分函数 void printScore();//声明打印函数 //设置结构体&#xff0c; struct student { …

【Linux Shell】4. 数组

文章目录 【 1. 数组的定义 】【 2. 读取数组 】【 3. 关联数组 】【 4. 获取数组中的所有元素 】【 5. 获取数组的长度 】 数组中可以存放多个值。 Bash Shell 只支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;初始化时不需要定义数组大小。与大部分编程语言…

linux释放交换空间-Swap

确保剩余内存比swap内存空间大&#xff0c;再执行以下操作&#xff0c;否则会宕机&#xff01; 查看swap分区 swapon -s 会查看到你的swap分区位置 停止swap分区 停止swap分区是将swap内存释放到实际内存中 swapoff /dev/dm-1开启swap分区 swap分区内存成功释放到实际内…

年末汇总⭐️ 我是如何从学生切换到职场人身份的

目录 今日天气 阴 温度较低 一、Learning 二、Working 三、Living 章末 今日天气 阴 温度较低 小伙伴们大家好&#xff0c;冬已至 年将末 身为逮虾户的我看到大家的年末总结心中也不由得涌起一股创作热情&#xff0c;奈何没文化&#xff0c;只能按照…

linux中最常用的目录导航命令

文章目录 Linux中最常用的目录导航命令探索未知世界的cd进入刚才的目录快速返回家目录进入某用户的家目录结合CDPATH的妙用!$用shopt –s cdspell自动纠正cd命令的目录名输入错误 最常用的且没有之一的 ls命令格式不加任何参数使用-l显示更多细节使用-t按照时间排序使用-r按照时…

JAVA的引用与C++的指针有什么区别

JAVA的引用与C的指针有什么区别 1. Java值类型与引用类型1.1 变量初始化1.2 变量赋值1.3 函数传参 2. Java数据存储方式2.1 Java局部变量&&Java方法参数2.2 Java数组类型引用和对象2.3 String类型数据 3. Java引用类型3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用 4. JAV…

关于TypeScript Interface你需要知道的10件事

TypeScript接口的10种使用场景——可能只有20%的web开发人员完全掌握它们 TypeScript中的接口是一个非常灵活的概念。除了抽象类的部分行为外&#xff0c;它还经常用于描述“对象的形状”。 必需的属性 在定义接口时&#xff0c;需要使用 interface 关键字: interface Use…

prometheus基本介绍

官网&#xff1a;https://prometheus.io/docs/introduction/overview/ 中文&#xff1a; https://www.prometheus.wang/ Prometheus 选择 Prometheus 并不是偶然&#xff0c;因为&#xff1a; • Prometheus 是按照 《Google SRE 运维之道》的理念构建的&#xff0c;具有实用…

css sourcemap 源代码映射

vue.config.js css: {// Enable CSS source maps.sourceMap: process.env.NODE_ENV ! production, }重新运行&#xff1a;yarn serve 效果&#xff1a;

基于sy3130光感入耳检测功能成功实现

基于sy3130光感入耳检测功能成功实现 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 芯片介绍 2 电路实现 3 寄存器列表

部署清华ChatGLM-6B(Linux版)

引言 前段时间,清华公布了中英双语对话模型 ChatGLM-6B,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。因为条件特殊,实验室网络不通,那么如何进行离线部署呢? 「部署环境」:CUDA Version 11.0,…

41.使用@Autowired注解自动装配的过程是怎样的?

使用@Autowired注解自动装配的过程是怎样的? 记住:@Autowired 通过Bean的后置处理器进行解析的 在创建一个Spring上下文的时候,在构造函数中进行注册AutowiredAnnotationBeanPostProcessor在Bean的创建过程中进行解析在实例化后预解析(解析@Autowired标注的属性、方法 比如…