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

位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。

位运算就是直接对整数在内存中的二进制位进行操作。因此位运算的执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性能。

按位与 &

相同位的两个数字都为 1 时,则为 1 ;否则为 0 。例如:

1 0 0 1 1
&
1 1 0 0 1
结果为
1 0 0 0 1

按位或 |

相同位的两个数字都为 0 时,则为 0 ;否则为 1 。例如:

1 0 0 1 1
|
1 1 0 0 1
结果为
1 1 0 1 1

按位异或 ^

相同位的两个数字相同时,则为 0 ;否则为 1 。例如:

1 0 0 1 1
^
1 1 0 0 1
结果为
0 1 0 1 0

按位取反 ~

对所有位取反,即将 0 变为 1 ,将 1 变为 0 。例如:

~ 1 0 0 1 1
结果为
0 1 1 0 0

左移 <<

向左进行移位操作,高位丢弃,低位补 0 (左移多少位,就在二进制数后面添加多少个 0 )。例如:

int a = 9;
a << 3;
移位前:0000 0000 0000 0000 0000 0000 0000 1001
移位后:0000 0000 0000 0000 0000 0000 0100 1000

可以看出:

移位后 a 的十进制数由 9 变为了 72,也就是 9 * (2 ^ 3) 。

即 a << b 等价于 a * (2 ^ b) 。

因为在二进制数后添一个 0 就相当于该十进制数乘以 2 。

右移 >>

向右进行移位操作,低位丢弃,高位补 0 (右移多少位,就从二进制数末尾开始去掉多少位)。例如:

int a = 72;
a >> 3;
移位前:0000 0000 0000 0000 0000 0000 0100 1000
移位后:0000 0000 0000 0000 0000 0000 0000 1001

可以看出:

移位后 a 的十进制数由 72 变为了9,也就是 72 / (2 ^ 3) 。

即 a >> b 等价于 a / (2 ^ b) 取整

因为二进制数每丢弃一位,就相当于该十进制数除以 2 。

 

参考:七分钟全面了解位运算

相关文章:

  • pip 不是内部或外部命令
  • 一个大专生的理财观
  • Unity 本地数据持久化之 PlayerPrefs
  • 给投资入门者的几点建议
  • Lua实战之布尔值(boolean)排序
  • 生命的厚味
  • Lua 使用 os.time 获取时间戳需谨慎
  • 用BAT和VBS搜集AD中的客户PC资料
  • Lua string.format() 使用整理
  • 一个成功创业者的心得
  • Lua实战之以非科学记数法输出小数
  • SVN服务器的搭建与使用
  • 犹太人常说的理财故事
  • SVN设置强制注释才能提交
  • 35岁前成功的12条黄金法则
  • 深入了解以太坊
  • 【Leetcode】101. 对称二叉树
  • 【技术性】Search知识
  • 2017-08-04 前端日报
  • const let
  • ESLint简单操作
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Kibana配置logstash,报表一体化
  • learning koa2.x
  • Mysql优化
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SpringCloud集成分布式事务LCN (一)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 解析 Webpack中import、require、按需加载的执行过程
  • 算法-插入排序
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​MySQL主从复制一致性检测
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 数论-逆元
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (二)构建dubbo分布式平台-平台功能导图
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读40-45)图像描述1
  • (四)图像的%2线性拉伸
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)nsfocus-绿盟科技笔试题目
  • (转)为C# Windows服务添加安装程序
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)