位运算

这里主要总结一些位运算的基础用法,不从位运算的运算过程展开了:

1.&(and)运算

&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。

基础用法:

(1)可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

(2)x & (x-1) 用于消去 x 的最后一位 1。

(3)在运用(2)的基础上可以用来判断一个正整数是不是2的整数幂次,如果x & (x-1) 是0,说明是;如果不是0,说明不是;


2.| (or)运算

|运算通常用于二进制特定位上的无条件赋值,例如一个数 | 1的结果就是把二进制最末位强行变成1。

基础用法:

(1)如果需要把二进制最末位变成0,对这个数or 1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

(2)


3.^(xor)运算

^运算通常用于对二进制的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。

基础用法:

(1) ^ 运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a ^ b) ^ b = a。

(2)一个数 a^a=0;

(3)运用(1)可以延伸很多用法,比如判断一个数组里面出现一次的数(其他的数出现两次);

(4)是第(3)的进阶,有一个 n 个元素的数组,除了两个数只出现一次外,其余元素都出现两次,让你找出这两个只出现一次的数分别是几?
这道题的思路是把所有元素都异或,那么得到的结果就是那两个只出现一次的元素异或的结果。然后把这个结果转化为二进制,找到为 1 的一个位置,根据这个位置是否为1把数组里所有的元素分成两部分;然后两部分分别异或,得到的就是两个只出现一次的数;


4.这几种常见的位运算运算性质

(1)信息丢失

位运算中“与”、“或”会造成信息丢失,他们是单向运算,不可逆运算。

但是“异或”不会,例如:

x ^ a = y;
当a 确定时,x与y 一一对应,且
x = y ^ a;

(2)运算性质

一般情况下,结合律和分配律是失效的,只有交换律能安全使用。

例如:

交换律:
a | b=b | a;
a ^ b=b ^ a;
a & b=b & a;

结合律:
(3|1)&2=2;
3|1&2=3;

分配律:
(4|3)^1=6;
(4 ^1 ) | ( 3 ^1)=7;

但是对于单一的位运算来说,结合律都是符合的,其实就是变为了交换律;


贴一张用法大全图:

位运算的一些技巧总结相关推荐

  1. 算法优化——位运算的优化技巧

    1 致谢 感谢赵老师的讲授! 2 前言 今天在学习算法与数据结构~ 赵老师给我们讲了一点位运算的使用技巧,感觉还挺有意思的,这里记录一下~ 3 位运算的优化技巧 n&1判断奇偶性 使用n&am ...

  2. 【建议收藏】面试官会问的位运算奇淫技巧

    往期热门文章: 1.到底可不可以用 kill -9 关闭程序?2.IDEA 2021首个大版本发布,新增了这几个超实用功能!3.Optional 是个好东西,你真的会用么?4.Java 8 Concu ...

  3. LeetCode #1349. 参加考试的最大学生数 - 学到了:压缩状态动态规划、位运算、reduce()、str().count()

    赛题见:https://leetcode-cn.com/problems/maximum-students-taking-exam/ 我的解法是用递归实现广度优先搜索,结果是对的,但是太慢,超时了.这 ...

  4. C++ 算法篇 位运算

    学习目标 1. 理解与掌握 C++ 中的位运算.  2. 灵活应用位运算优化程序. 任何信息在计算机中都是采用二进制表示的,数据在计算机中是以补码形式存储的,位运算就是直接对整数在内存中的二进制位进行 ...

  5. 【231】判断是否是2的次幂--位运算相关

    给你一个整数 n,请你判断该整数是否是 2 的幂次方.如果是,返回 true :否则,返回 false . 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方. 示例 1: 输 ...

  6. 全面解读Math对象及位运算

    <p>本文转载自:<a href="https://segmentfault.com/a/1190000008786789" title="全面解读Ma ...

  7. 位运算的一些奇技淫巧

    位运算的一些奇技淫巧 位运算这种计算方式已经淡出我的编码习惯很久了,最近突然看见一篇推文在讲一些位运算在特殊场景下的奇妙作用,这显然勾起了阿光对于位运算的一泡浓厚的兴趣,于是我就搜集了一些位运算常用的 ...

  8. python写整数逆位运算_简单了解python的一些位运算技巧

    前言 位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中 ...

  9. Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法

    Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法 引用功能被关闭了. 苹果电脑 Mac OS X 10.6 雪豹系统同时支持 32 位和 64 ...

最新文章

  1. LiveBos---扩展按钮调用方法
  2. VIVO X1手机通过USB连接电脑访问tomcat
  3. Linux find命令批量替换字符串find roles/hadoop_ha/vars/ -name “*.yml“ |xargs perl -pi -e ‘s|node135|node108|g‘
  4. 软件测试之控制流图以及环形复杂度独立路径求解问题
  5. mysql自动定时备份数据,mysql数据库自动定时备份脚本
  6. python string.format(),Python string.format()百分比,不取整
  7. 显示出eclipse文件层次
  8. 词嵌入word2vec、字词嵌入fastText、全局词嵌入Glove直接的联系与关系
  9. 数据挖掘和数据仓库之间的区别
  10. 中仪股份管道机器人_中仪股份中仪股份cctv检测管道机器人X5-HSX5-HS
  11. wps ppt 如何批量换背景
  12. Arduino 和 HC-SR04 超声波传感器 测距
  13. 如何用计算机计算一组数据的方差,Excel计算一组数据的方差的操作方法
  14. 三角函数各个公式推理及证明
  15. Swagger之OAS 3.0配置
  16. 机器学习阶段性总结[机器学习]
  17. 【洛谷】P2298 Mzc和男家丁的游戏*
  18. 使用gatekeeper限制kubernetes创建特定类型的资源
  19. 微信小程序页面分享出去后用户无法通过分享页面返回首页bug解决方法
  20. 世纪佳缘发布婚恋观报告:“00后”抗拒相亲又是最早相亲人群

热门文章

  1. 基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟
  2. vue3使用setup代替created
  3. PyTorch 自然语言处理(Natural Language Processing with PyTorch)翻译完成 | ApacheCN
  4. Office 2008 for Mac试用印象
  5. 【天光学术】古代文学论文该怎么写?为你步步解说!
  6. datafountain自然语言处理比赛的学习和总结
  7. 格网DEM生成不规则三角网TIN
  8. Anaconda3 安装 爬虫库 selenium(windows环境)
  9. 解决超新尔雅网课无法倍速(16+倍速冲刺)
  10. 计算机电子琴谱小星星,小星星电子琴谱