位运算(包括OR,AND,XOR,NOR,NAND,XNOR,以及0xFF等常见应用)

news2024/12/26 23:28:05

目录

​编辑

1、按位与操作

2、按位或操作

3、取反运算

4、异或运算 不同为1,相同为0

​编辑

5、左移运算

6、右移运算

常见用途:

C语言位运算讲解:


位运算(包括OR,AND,XOR,NOR,NAND,XNOR,以及&0xFF等常见应用)
位运算是C语言的重要特点,是其他计算机高级语言所没有的,位运算是以二进制为对象的运算,二进制表示法与计算机内存完全对应,每个单元(位)都可以设置成开(1)或关(0)。而且位运算比正常的运算符速度要快很多,因为位运算是一种底层的运算,但是理解起来会偏难一些。

其他补充:

1、位运算符中除~外,均为耳目运算符

2、运算只能是整型或者字符型的数据,不然会报错

常见的位运算符

1、按位与操作

 例如: 7&5的结果为5,计算如:

常见用途:

清零: 如果想将一个单元清零,让其与一个各位都为0的数值相与

取数(常见保留低八位,或者低16位,图像中常见):

例如,X=1001110101, 进行操作 X&0xFF 之后得到 01110101 Y=10000000000100111,进行操作 Y&0xFFFF 之后得到 0000000000100111

2、按位或操作

例如: 7|5的结果为7,计算如:

常见用途:

负数补码

将一个数的某些‘’位‘置为1 例如:把Z=10100110的低4位的数置为1,Z|00001111即可满足目的。

3、取反运算

例如:~7的结果为-8,计算如:

常见用途:

使一个数的最低位为0,例如:Q&~1, ~1的值为1111111111111110,在与操作之后,最低位一定为0,~的优先级高于算数运算符、关系运算符、逻辑运算符等

4、异或运算 不同为1,相同为0

例如:10^-9的结果为-3 计算如:

即 0000 1010 ^ 1111 0111 = 1111 1101(补码) 原码即为1000 0011 即10^-9 = -3

常见用途:

使特定位翻转:例如Q=10110110,使Q低4位翻转,用X ^ 0000 1111 = 1011 1001即可得到

与0相异,保留原值: Q^0000 0000 = 10110110

交换A和B:


不推荐以上这个交换方式,相应还有一种加减的方法交换数值(如下所示),同样不推荐,难懂且效率不如中间临时变量的方法。

5、左移运算

 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)

例如:X =18; X= X <<2,结果为72 计算如:

上述左移一位后X=X*2; 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

6、右移运算

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃

例如:X =18; X= X >>2,结果为4 计算如:

常见用途:

操作数每右移一位,相当于该数除以2(向下取整)。

注意:

移位运算符在C++中会生成一个新值,但不回修改原来的值,例如:


上述代码两次输出的值均为108,即不会修改x的值,表达式x<<2使用x的值来生成一个新的值,就像x+3会申城一个新值,但不会修改x一样,如果要用移位运算符来修改变量的值,则必须使用赋值运算符,可以使用常规的赋值运算符或者<=运算符,如:


位运算的一些其他应用:

 1、判断奇偶数

对于除0之外的任何数,使用X&1==1作为逻辑判断即可,例如:


2、判断某个二进制是否为1

 //例如判断x的第五位是否为1,十六进制的0x10转换为二进制是0001 0000

3、求平均数

 


4、判断两个数是否异号


5、数据加密


上述输出结果为:

Initial date: 我和我的祖国
Encrypt date: 户细户辣虖
Decode date: 我和我的祖国

6、取绝对值(效率高)


或者


其他操作参见https://zhuanlan.zhihu.com/p/148790042

另外对于一些符号,例如OR,AND,XOR,NOR,NAND,XNOR以及其实现等简单说一下


 

C语言位运算讲解:

//定义两个8位的变量
unsigned char Byte1 = 0x15;
unsigned char Byte2 = 0xf6;

//一个字节分为8位,叫法不一,都是一个意思
//叫法一:位7    位6    位5    位4    位3    位2    位1    位0  
//叫法二:Bit7   Bit6   Bit5   Bit4   Bit3   Bit2   Bit1   Bit0  
//叫法三:第8位  第7位  第6位  第5位  第4位  第3位  第2位  第1位
//不建议使用第3种叫法,建议第2种

Byte1 |= (0x01 << 3);        //这句的意思:把Byte1的Bit3置1
Byte2 &= ~(0x01 << 6);        //这句的意思:把Byte2的Bit6置0

/*1、Byte1 |= (0x01 << 3);的计数过程详解:
  1)、|=叫做或等,与+=作用类似,a|=b就是a=a|b,a+=b就是a=a+b。所以Byte1 |= (0x01 << 3);就是Byte1 = Byte1|(0x01 << 3);
  2)、0x01用把8位二进制表示:0000 0001 (注:Byte1是8位的数据,所以使用8位二进制,如果Byte1是16位数据,则使用16位二进制...)
       然后左移3位,就变成了0000 1000。
  3)、Byte1的值是0x15,即0001 0101,Byte1或上(0x01 << 3),就是0001 0101和0000 1000按位或
        0001 0101
      | 0000 1000
  结果是0001 1101,与Byte1的原值相比,区别就是Bit3被置为了1

  2、Byte2 &= ~(0x01 << 3);的计数过程详解:
  1)、&=叫做与等,a&=b就是a=a&b。所以Byte2 &= ~(0x01 << 3);就是Byte2 = Byte2&(~(0x01 << 3));
  2)、0x01用把8位二进制表示:0000 0001 
       然后左移6位  就变成了 0100 0000
       左移后再取反 就变成了 1011 1111
  3)、Byte2的值是0xf6,即1111 0110,Byte2与上~(0x01 << 6),就是1111 0110和1011 1111按位与
        1111 0110
      & 1011 1111
  结果是1011 0110,与Byte1的原值相比,区别就是Bit6被置为了0
*/

十六进制数值转换成十进制数值的知识

/*
相关知识:
十六进制数换算成十进制数值的方法
例如:将十六进制数0xAE转换为十进制数

方法一:
转成二进制再换算成十进制二进制:
0xAE的二进制表示:       1   0  1  0   1 1 1 0
各位对应的十进制数值 : 128 64 32 16  8 4 2 1
最终得到十进制数值就是 128  + 32  +  8+4+2 = 174

方法二 : 
十六进制直接换算成十进制数值
0xAE:A即10,E即14,进制为16
所以0xAE等于10x16的1次方 + 14x16的0次方 = 174

*/
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React 项目中引入msal验证以及部分报错处理

功能实现 如何在React 项目中引入msal身份验证&#xff0c; 微软在官网有提供文档支持&#xff0c;文档包含示例和具体使用的教程&#xff0c;地址如下&#xff1a; https://learn.microsoft.com/zh-cn/azure/active-directory/develop/tutorial-v2-nodejs-webapp-msal 照着文…

ppt转pdf免费的工具哪个好用?ppt在线转pdf的方法分享

在工作和学习中&#xff0c;将PPT文件转换为PDF格式具有重要意义。PDF文件的大小较小&#xff0c;适用于各种平台和设备&#xff0c;保持了原始文件的内容和格式&#xff0c;具有广泛的可读性和兼容性。那么小编就来为大家详细地说一说“ppt转pdf免费的工具哪个好用?ppt在线转…

Pycharm链接远程mysql报错

Pycharm链接远程mysql配置及相应报错如下&#xff1a; 解决方法&#xff1a; 去服务器确认Mysql版本号&#xff1a; 我的Mysql为5.7.43&#xff0c;此时Pycharm mysql驱动为8.0版本&#xff0c;不匹配&#xff0c;所以需要根据实际的版本选择对应的驱动&#xff1b;选择对应的版…

TinyVue - 华为云 OpenTiny 出品的企业级前端 UI 组件库,免费开源,同时支持 Vue2 / Vue3,自带 TinyPro 中后台管理系统

华为最新发布的前端 UI 组件库&#xff0c;支持 PC 和移动端&#xff0c;自带了 admin 后台系统&#xff0c;完成度很高&#xff0c;web 项目开发又多一个选择。 关于 OpenTiny 和 TinyVue 在上个月结束的华为开发者大会2023上&#xff0c;官方正式进行发布了 OpenTiny&#…

uniapp使用sqlite 数据库

uniapp使用sqlite 数据库 傻瓜式使用方式&#xff0c;按步骤&#xff0c;即可使用。 1.开启sqlite 在项目中manifest.json该文件中配置 2.封装数据库的调用方法 const sqlName "zmyalh" //定义的数据库名称 const sqlPath "_doc/zmyalh.db" //定义数…

【腾讯云 TDSQL-C Serverless 产品测评】- 云数据库之旅

“腾讯云 TDSQL-C 产品测评活动”是由腾讯云联合 CSDN 推出的针对数据库产品测评及产品体验活动&#xff0c;本次活动主要面向 TDSQL-C Serverless版。 本次参与活动可以涵盖不同技术层面的用户&#xff0c;可以针对TDSQL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并…

EasyExcel自定义字段对象转换器支持转换实体和集合实体

文章目录 1. 实现ObjectConverter2. 使用3. 测试3.2 导出excel3.1 导入excel 1. 实现ObjectConverter package com.tophant.cloud.common.excel.converters;import cn.hutool.json.JSONUtil; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.…

CSS中如何实现多列布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 多列布局&#xff08;Multi-column Layout&#xff09;⭐ column-count⭐ column-width⭐ column-gap⭐ column-rule⭐ column-span⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧…

多线程与高并发——并发编程(2)

文章目录 二、并发编程的三大特性1 原子性1.1 什么是原子性1.2 怎么保证原子性1.2.1 synchronized1.2.2 CAS1.2.3 Lock 锁1.2.4 ThreadLocal 2 可见性2.1 什么是可见性2.2 解决可见性的方式2.2.1 volatile2.2.2 synchronized2.2.3 Lock2.2.4 final 3 有序性3.1 什么是有序性3.2…

iOS HealthKit 介绍

文章目录 一、简介二、权限配置1. 在开发者账号中勾选HealthKit2. 在targets的capabilities中添加HealthKit。3. infoPlist需要配置权限 三、创建健康数据管理类1. 引入头文件2. 健康数据读写权限3. 检查权限4. 读取步数数据5. 写入健康数据 四、运行获取权限页面 一、简介 He…

Linux 下 Mysql 的使用(Ubuntu20.04)

文章目录 一、安装二、使用2.1 登录2.2 数据库操作2.2.1 创建数据库2.2.2 删除数据库2.2.3 创建数据表 参考文档 一、安装 Linux 下 Mysql 的安装非常简单&#xff0c;一个命令即可&#xff1a; sudo apt install mysql-server检查安装是否成功&#xff0c;输入&#xff1a; …

【KingSCADA】问题处理:记录KS历史报警查询异常

哈喽&#xff0c;大家好&#xff01;我是雷工。 本篇记录KingSCADA的历史报警应用中的一个问题&#xff0c;及处理过程。 一、问题描述 最近客户遇到这么一个问题&#xff1a;当打开历史报警窗界面&#xff0c;自动加载的报警信息中有显示最近几天的报警信息&#xff0c;但当…

基于亚马逊云科技无服务器服务快速搭建电商平台——部署篇

受疫情影响消费者习惯发生改变&#xff0c;刺激了全球电商行业的快速发展。除了依托第三方电商平台将产品销售给消费者之外&#xff0c;企业通过品牌官网或者自有电商平台销售商品也是近几年电商领域快速发展的商业模式。独立站电商模式可以进行多方面、全渠道的互联网市场拓展…

【UniApp开发小程序】私聊功能uniapp界面实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】

文章目录 效果显示WebSocket连接使用全局变量WebSocket连接细节 最近和自己聊天的用户信息界面效果界面代码最近的聊天内容太长日期时间显示未读消息数量显示 私聊界面界面展示代码实现英文长串不换行问题聊天区域自动滑动到底部键盘呼出&#xff0c;聊天区域收缩&#xff0c;聊…

软考A计划-系统集成项目管理工程师-知识产权管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

基于黏菌算法优化的BP神经网络(预测应用) - 附代码

基于黏菌算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黏菌算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黏菌优化BP神经网络2.1 BP神经网络参数设置2.2 黏菌算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

文章目录 1. HTTPS 协议2. 生成 SSL 证书和私钥文件3. 配置 SSL 证书和私钥文件4. HTTPS 协议优化 1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本&#xff0c;通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户…

AI夏令营第三期用户新增挑战赛学习笔记

1、数据可视化 1.数据探索和理解&#xff1a;数据可视化可以帮助我们更好地理解数据集的特征、分布和关系。通过可视化数据&#xff0c;我们可以发现数据中的模式、异常值、缺失值等信息&#xff0c;从而更好地了解数据的特点和结构。2.特征工程&#xff1a;数据可视化可以帮助…

[Linux]文件IO

文章目录 1. 文件描述符1.1 虚拟地址空间1.1.1 存在的意义1.1.2 分区 1.2 文件描述符1.2.1 文件描述符1.2.2 文件描述符表 2. Linux系统文件IO2.1 open/close2.1.1 函数原型2.1.2 close函数原型2.1.3 打开已存在文件2.1.4 创建新文件2.1.5 文件状态判断 2.2 read/write2.2.1 re…

论文解读 | ScanNet:室内场景的丰富注释3D重建

原创 | 文 BFT机器人 大型的、有标记的数据集的可用性是为了利用做有监督的深度学习方法的一个关键要求。但是在RGB-D场景理解的背景下&#xff0c;可用的数据非常少,通常是当前的数据集覆盖了一小范围的场景视图&#xff0c;并且具有有限的语义注释。 为了解决这个问题&#…