文档章节

JavaScript 位运算笔记

smalldragonluo
 smalldragonluo
发布于 2014/06/16 13:08
字数 272
阅读 269
收藏 2

之前一直以为,在js的位运算中,双精度浮点数在内部会先被转成32位整数,再执行位运算,然后再转为64位数值,因此效率极低。今天实验发现,对浮点执行位运算只会导致数值不准确,而不会导致效率低下,相比乘法,左移位要快66%(其实就是浮点运算与整数运算的差距)。

以下结果在 IE 7 ~ IE 10 上测试得出

技巧1:移位运算比乘除法快(当因数是2的幂数)

<!-- lang: js -->
b = a << 1;

大概快 6.8%

技巧2:奇偶判断

<!-- lang: js -->
b = a & 1;

0位与1相与,相比于 x % 2,大概快 35%

技巧3:判断两个数符号是否相同

<!-- lang: js -->
(a ^ b) >= 0

相比于

<!-- lang: js -->
if ( a == 0 )
    return 1;
else if ( a > 0 )
    return b >= 0;
else
    return b <= 0;

其效率基本一样,但更简洁。

相比于

<!-- lang: js -->
(a * b) >= 0;

不会有溢出问题。

技巧4:判断一个数是否为2的幂

<!-- lang: js -->
(a & (a - 1)) == 0;

© 著作权归作者所有

共有 人打赏支持
smalldragonluo
粉丝 2
博文 9
码字总数 5320
作品 0
南岸
私信 提问
《javascript语言精粹》读书笔记(一)

第一章 精华 任何语言都有其精华的部分和鸡肋的部分,javascript也不例外,而且鸡肋的部分还很多。但javascript的流行却不受他的质量影响。javascript为何如此流行?因为他是web浏览器的语言...

倪闯
2015/03/11
0
3
《JavaScript权威指南》笔记(二)

第二篇笔记的内容主要涉及:数据类型转换,函数、对象、数组的创建以及null与undefined的比较。 1. javascript中类型转换的方法: (1)数字-->字符串: number+" "; String(number); number...

小微
2012/08/28
0
7
JavaScript学习笔记(二)

JavaScript的数据类型分为:原始类型和对象类型。JavaScript中有两个特殊的原始值:null(空)和undefined(未定义)。 JavaScript中所有数字均用浮点数值表示。javaScript采用64位浮点格式表示数...

第五郎
2014/03/29
0
0
《JavaScript语言精粹》笔记

0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。 1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数...

dwqs
2015/01/20
0
2
有关javascript的数据类型

最近看到javascript的数据类型 JS中只有整数和浮点数的概念 但是都是用双精度浮点数来表示 于是乎 冒出了两个说法,一种说法是 位操作 >> 在JS中无用 ,因为会先转化为整数再进行运行,会影响...

喵星人123
2013/09/14
71
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部