一、基础操作

1.a<<b

将二进制a左移b位,不够的地方用0补位

例如

100<<2 == 10000

2.a>>b

将二进制a右移b位

例如

100>>2 == 1

3.a|b

或操作(按位或),相同位中只要有一个1或者两个1则结果为1,全0则结果为0

4.a&b

与操作(按位与),相同位中只要都是1,则结果为1,如果一个为0一个为1或者都是0则结果为0。

5.a^b

异或,相同位只要一个1一个0,则结果为1;相同位二进制相同则结果为0 。

二、进阶操作

1.快速求2^n

1<<n == pow(2,n)

原理:1<<n的意思是1的二进制向左移动n位,则此数二进制形式变成了 100000...000(n个0),恰好是2^n

2.判断奇数偶数

n&1 == 1则为奇数

n&1 == 0则为偶数

原理:n&1的意思是n与1,那么n与1中,1除了右端位为1其他位都是0,则由与运算得到的结果中其他位必定都是0 。

所以最后得到的结果只与1的右端位和n的右端位有关,我们知道1的右端位为1,那么n的右端位只有为1的时候与1进行与运算的结果是1;n的右端位只有为0的时候与1进行与运算的结果是0 。

显然二进制右端位为1的时候该数为奇数,为0时该数为偶数,所以得证。

3.lowbit

a&(-a) 代表着a的二进制的最后一位。

原理:涉及到二进制的补码知识,感兴趣的人可以自己了解。

三、高阶操作

1.a >> b & 1 代表着如果a的第b位为1则为真

用来判断二进制的某一位

原理:a左移b位,则a的右端位就是原来a的第b位,这时与1做与运算(1左边的0由与运算性质得没有影响)就可以得知这一位是1还是0(1&1 == 1,0|1 == 0 )

2.a|(1<<n) 代表着将a的二进制的第n位设为1

原理:1<<n可以看作由一个1和n个0组成的二进制数,其中0的部分由或的性质(0|0==0,1|0==1)可以知道不会对二进制位产生影响。

而1的部分由或的性质(1|1==1,0|1=1)可以得出一定是1。

四、图论

x表示要判断的点,S表示集合

(1 << x) & S == true 即x在S集合里,如果为false则x不在S集合里

S = S | (1 << x) 表示S集合中加入了x点

最新文章

  1. Android入门(二十)HttpURLConnection与HttpClient
  2. iOS : 静态库制作
  3. IDEA15 File工具栏中没有 Import Project
  4. MongoDB 2.6.x 的安装部署
  5. 【HDOJ】1829 A Bug&#39;s Life
  6. checkbox 与JS的应用
  7. VirtualBox开发环境的搭建详解
  8. 开源NetWorkSocket通讯组件
  9. bzoj4198 荷马史诗 哈夫曼编码
  10. 返回数组中指定的一列,将键值作为元素键名array_column
  11. clouderamanager安装
  12. JavaScript是如何工作: 深入探索WebSocket和HTTP/2与SSE + 如何选择正确的路径!
  13. 一个是EF内联多表查询,一个是EF中写SQL文。
  14. 使用IDEA导出可运行的jar包,包含引用第三方jar包
  15. (转)C#读写共享文件
  16. Redis集群错误
  17. .NetCore 分布式日志收集Exceptionless 在Windows下本地安装部署及应用实例
  18. 洛谷 P1082 同余方程
  19. Linux-socket的close和shutdown区别及应用场景
  20. JBoss服务器优化

热门文章

  1. vue v-for详解
  2. 工控安全入门(三)—— 再解S7comm
  3. 深入浅出 Java Concurrency (7): 锁机制 part 2 AQS[转]
  4. Django项目: 5.新闻主页
  5. matlab中disp函数的简单用法
  6. T2483 电梯(模拟题)
  7. 如何处理HTML5新标签的浏览器兼容问题?
  8. 再也不怕数据丢失!阿里云RDS MySQL 8.0上线回收站功能
  9. 异步 I/O 和事件驱动
  10. Eclipse安装Spket插件