最近在看最基础的《javascript高级程序设计》看的灰常慢,看到按位运算这里,突然反思,这种鬼操作到底有什么实际的应用呢?

按位运算符有6个

& 按位与:a & b

|按位或:a | b

^按位异或:a^b

~按位取非:~a

>>右移: a>>2

<<左移:a<<2

>>> 无符号右移:a >>> b

实际应用

求负数减1 反转操作

console.log(~true)  //-2
console.log(~false) // -1

快速判断字符串中首付含有某个字符

if (~'mayufo'.indexOf('may')) {
console.log(true);
}

如果是-1 ~(-1) = 0

快速取整

console.log(~~30.79); //30

按位异或快速取整

console.log(30.79 | 0); //30

判断奇偶

console.log((32 | 0) & 1); //0为偶数,1为奇数

交换变量

var a = 1,
b = 2; console.log(a, b); a ^= b; b ^= a; a ^= b;
console.log(a, b);

快速进行幂计算

var c = 3; d = 2.45;e=16;

console.log(c<<3);//16   等于3*(2的3次方)
console.log(d>>0);//2(向右移0位,小数部分丢失,取整)
console.log(e>>3);//2 等于16/(2的3次方)

优化乘法和除法性能

加减计算只需要1个时钟周期

乘法需要10个时钟周期

除法需要30个时钟周期

所以乘法和除法在运行的速度上弱于加法减法。

但我们可以用位运算来对乘法和除法进行降维运算

参考

https://www.zhihu.com/question/21592697

最新文章

  1. NGUI裁剪模型和粒子
  2. sql server如何分组编号
  3. MySQL实现嵌套集合模型
  4. 使用C#设计Fluent Interface
  5. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
  6. React高级特性
  7. 侧菜单栏的实现SlidingPaneLayout
  8. ParameterDirection参数类型
  9. php使用技巧--之链接地址
  10. 谈谈css中的before和after
  11. XAMPP安装及配置注意事项
  12. 芝麻HTTP:PhantomJS的安装
  13. python ddt数据驱动(简化重复代码)
  14. python至winreg模块
  15. EmBitz1.11中将左边的目录弄出来
  16. Ubuntu 16.04配置国内高速apt-get更新源
  17. jQuery之双下拉框
  18. linux系统下安装ssl证书(tomcat)
  19. IPC_Binder_java_1
  20. 制作macOS10.12系列的系统镜像文件

热门文章

  1. SSH的简单入门体验(Struts2.1+Spring3.1+Hibernate4.1)- 查询系统(下)
  2. 移动开发之css3实现背景渐变效果
  3. 在.NET4.5项目中添加HttpClient引用的办法
  4. MySQL数据库中的Date,DateTime,int,TimeStamp和Time类型的对比
  5. 【转】jenkins插件pipeline使用介绍
  6. vs2012将项目同步到github
  7. SpringCloud Gateway(八)
  8. uestc1633
  9. Linux命令之umount
  10. 【数学期望】【高斯消元】bzoj3143 [Hnoi2013]游走