【与运算】

与运算常用于二进制的取位操作,其用符号 & 表示,相同位的两个数字都为1,则为1,若有一个不为1,则为0。

例如:00101 & 11100 = 00100

其会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。

例如:3(11) & 2(10) = 2(10)

典型应用:任意一个数 &1 的结果就是取二进制的最末位,常用于判断数的奇偶,最末位为 0 表示该数为偶数,最末位为 1 表示该数为奇数。

【或运算】

或运算常用于二进制特定位上的无条件赋值,其用符号 | 表示,相同位的两个数字只要一个为 1 即为 1。

例如:00101 | 11100 = 11101

其会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值。

例如:3(11)|2(10)=3(11)。

典型应用:一个数 | 1 的结果就是把二进制最末位强行变成 1,如果需要把二进制最末位变成 0,对这个数 | 1 后再减一即可,其实际意义就是把这个数强行变成最接近的偶数。

【非运算】

非运算是把内存中的 0 和 1 全部取反,用符号 ~ 表示。

使用非运算时要格外小心,需要注意整数类型有没有符号,如果非运算的对象是无符号整数,那么得到的值就是它与该类型上界的差,因为无符号类型的数是用 00 到 $FFFF 依次表示的。

【异或运算】

异或运算,是对等长二进制模式按位执行逻辑按位异或操作,用符号 ^ 表示,如果某位不同则该位为 1,否则该位为 0。

例如:00101 ^ 11100 = 11001

其会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值。

例如:3(11) ^ 2(10) = 1(01)

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

【左移与右移】

1.左移运算

左移运算,用符号 << 表示,操作 a << b 就是把 a 转为二进制后左移 b 位(在后面填充 b 个 0),实质上就是 a 乘以 2 的 b 次方,因为在二进制数后添一个 0 就相当于该数乘以 2。

例如:100(1100100) << 2 = 400(110010000)

通常认为,a << 1 比 a*2 要更快,因为前者是更底层的操作,因此程序中乘以 2 的多少次方的操作尽量用左移位来代替。

2.右移运算

右移运算,用符号 << 表示,操作 a >> b 就是把 a 转为二进制后右移 b 位(去掉末尾 b 个 0),实质上就是 a 除以 2 的 b 次方(取整)。

例如:400(110010000) >> 2 = 100(1100100)

通常认为,a >> 1 比 a/2 要更快,因为前者是更底层的操作,因此程序中除以 2 的多少次方的操作尽量用右移位来代替。

常用技巧 —— 位运算 —— 位运算基础相关推荐

  1. cad单位_CAD制图初学入门常用技巧汇总,CAD零基础也不怕!

    CAD制图初学入门的小萌新们,最苦恼的莫过于:千辛万苦,好不容易安装的CAD软件,在实际CAD设计绘图中,居然遭遇各种问题.没有CAD制图初学入门教程.缺乏CAD大神指点.CAD图纸资源极度匮乏,CA ...

  2. CAD制图初学入门常用技巧汇总,CAD零基础也不怕!

    CAD制图初学入门的小萌新们,最苦恼的莫过于:千辛万苦,好不容易安装的CAD软件,在实际CAD设计绘图中,居然遭遇各种问题.没有CAD制图初学入门教程.缺乏CAD大神指点.CAD图纸资源极度匮乏,CA ...

  3. 位运算简介及实用技巧(一):基础篇

    去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章.后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法.从今天起我 ...

  4. 【技巧总结】位运算装逼指南

    位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子.不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也 ...

  5. c语言10以内位运算,C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  6. c语言提供了6个位运算,C语言基础丨运算符之位运算符(六)

    对于更多紧凑的数据,C 程序能够用独立的位或多个组合在一块儿的位来存储信息.文件访问许可就是一个常见的应用案例.位运算符容许对一个字节或更大的数据单位中独立的位作处理:能够清除.设定,或者倒置任何位或 ...

  7. 【FPGA】定点数 数据位宽 运算 位宽截取

    在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取. 运算要求和引起的位宽变化 假设存在两个数A.B,假定A位宽为m,小数位宽为a ...

  8. BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的

    BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的 原文:http://blog.csdn.net/qq445803843/article/details/46476433 这段代 ...

  9. 使用位运算(与运算)代替%操作

    使用位运算(&与运算)代替%操作 %运算为取余运算 由于我们知道位运算比较高效,在某些情况下,当b为2的n次方时,有如下替换公式: a % b = a & (b-1)(b=2^n) 即 ...

最新文章

  1. 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
  2. python之字符串的切片操作
  3. fastText原理和文本分类实战
  4. nginx + mysql + php-fpm 环境
  5. python面试题百度云下载_分享三道Python经典面试题
  6. Vue第一部分(3):事件绑定与标签属性赋值
  7. 分布式面试 - 分布式锁的常见问题
  8. 开源软件执照检查和工具探讨(Discuss the audit tools for open source license GPL/LGPL/MIT)
  9. python datetime和字符串如何相互转化?
  10. Transact-SQL 示例 - 触发器的基础及应用
  11. micropython入门教程-如何学习MicroPython MicroPython入门知识
  12. 有什么软件可以测试u盘的真假,U盘真假怎么检测|教你检测U盘真假的方法
  13. 0基础,如何快速学习自媒体,详细教程
  14. 电脑键盘部分按键失灵_笔记本电脑部分按键失灵,可能的原因有哪些?
  15. 华为asph是什么型号_华为triple camera这是什么型号
  16. 企业移动应用—我有 开启移动营销的里程碑
  17. vbox vdi磁盘注册_克隆Virtualbox的vdi硬盘 和 修改uuid
  18. 现代控制理论(机器人方向)习题与实践补充资料和复习说明(2019版)
  19. Mac小教程:Mac电脑怎么安装新字体
  20. MYSQL on和where的区别

热门文章

  1. repeater的嵌套(转+总结)[http://www.cnblogs.com/esshs/archive/2005/04/07/132825.html]
  2. Windows 11 将使 AMD 芯片性能下降 15%!
  3. 什么样的数据才有价值?应该怎样收集和处理?终于有人讲明白了
  4. 都啥年代了,求你别再说Redis是单线程了!
  5. 41款常用APP被爆过度索取权限、数据共享给第三方
  6. 备战双 11!96秒,100亿,支付宝万级规模 K8s 集群管理系统如何设计?
  7. 安装eclipse的JRebel6.4.3的插件
  8. Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
  9. x86 和 ARM 谁能主宰服务器市场?Linux 之父和 Redis 之父有分歧了
  10. 【Swift】类似于微博、微信的ActionSheet