当前位置: 首页 > news >正文

C语言 位操作

定义

位操作提高程序运行效率,减少除法和取模的运算。在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。

左移

后空缺自动补0

右移

分为逻辑右移和算数右移

逻辑右移

不管什么类型,空缺自动补0

算数右移

若是无符号数,则空缺补0,若是负数,则空缺补1

移位运算符

位运算符操作的都是整型的数据

<<:在一定范围内,每向左移1位,就相当于*2

>>:在一定范围内,每向右移1位,就相当于/2

左移运算符

左移运算符是一个计算机用语。用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。

计算方法

左移表达式的位 result = expression1 << expression2

参数 result,任何变量。

expression1,任何表达式。

expression2,任何表达式。

说明:<<运算符把expression1的所有位向左移expression2指定的位数。

左移

运算规则

按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

语法格式

需要移位的数字 << 移位的次数

数学意义

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

带符号右移 >>

运算规则

按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

语法格式

需要移位的数字 >> 移位的次数

数学意义

右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余 数就不要了。

无符号右移 >>>

运算规则

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。 其他结构和>>相似。

按位逻辑运算符

二进制反码或按位取反:~

一元运算符~把1变为0,把0变为1

~a不会改变a的值,但是该运算符确实创建了一个可以使用或者赋值的新值

char a=2;

char b=~a; //a的值不会被改变

a=~a; //改变了a的值

printf("%d",~a);

a的值为00000010,~a的值为11111101

按位与:& 都为1,结果为1

二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每一位,只有两个运算对象中相应的位都为1时,结果才是1

&=

val &=0377;+

val=val & 0377; //二者等价

按位或:| 至少一个为1,结果为1

二元运算符|,通过逐个比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为真

|=

val |= 0377;

val=val | 0377; //二者等价

按位异或:^ 只有一个为1,结果为1

二元运算符^逐位比较两个运算对象。对于每一位,如果两个运算对象中相应的位一个为1,但不是两个都为1,结果为1

^=

val ^=0377;

val=val^0377; //二者等价

应用

掩码:按位与 &

打开位(设置位) :|

关闭位(清空位):&和~

切换位 :^

检查位的值

http://www.lryc.cn/news/191901.html

相关文章:

  • Go语言中入门Hello World以及IDE介绍
  • Java面试题-Java核心基础-第二天(基本语法)
  • Linux 部署 GitLab idea 连接
  • Java延迟队列——DelayQueue
  • Vulnhub系列靶机---Raven2
  • 设计模式-生成器模式
  • Nginx正向代理配置(http)
  • ARMv5架构对齐访问异常问题
  • Go中varint压缩编码原理分析
  • 在IDEA中如何用可视化界面操作数据库? 在idea中如何操作数据库? 在idea中如何像Navicat一样操作数据库?
  • 数据库安全-RedisHadoopMysql未授权访问RCE
  • 辅助驾驶功能开发-功能规范篇(27)-3-导航式巡航辅助NCA华为
  • 探索UI设计|栅格系统的深入分析和应用
  • AI 律助 Alpha GPT 线上实操发布会,重磅发布!
  • 【漏洞复现】安全云平台存在任意文件下载getshell
  • 【JUC】原子操作类及LongAddr源码分析
  • 203、RabbitMQ 之 使用 direct 类型的 Exchange 实现 消息路由 (RoutingKey)
  • 微服务+Java+Spring Cloud +UniApp +MySql智慧工地综合管理云平台源码,SaaS模式
  • QMidi Pro for Mac:打造您的专属卡拉OK体验
  • bindtap和catchtap的区别?
  • IDEA—java: 常量字符串过长问题解决
  • 云原生SIEM解决方案
  • 工艺边与定位孔设计经验规则总结
  • 软件架构设计(业务架构、应用架构、数据架构、技术架构)
  • 我们又组织了一次欧洲最大开源社区活动,Hugging Face 博客欢迎社区成员发帖、Hugging Chat 功能更新!...
  • 学信息系统项目管理师第4版系列26_项目绩效域(下)
  • SQL sever中的索引
  • 多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm,MSSA)求解微电网优化MATLAB
  • 软件测试之概念篇(需求,测试用例,BUG描述,产品的生命周期)
  • jwt详细介绍