`

两个按位非操作与Math.floor操作(译)

阅读更多

位操作符在我们编码过程中是容易被遗忘的,可能更多的源于我们并不知道这些操作究竟代表什么,或者有什么样的作用,位操作符主要涉及有按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>),本文主要讲的是按位非(~)。

关于这个位操作的原理,大家可以参考这里

按位非(~)操作对数值进行操作后,结果为-(N + 1),如:

 

~2 == -3;//true
~1 == -2;//true
~0 == -1;//true
~-1 == 0;//true

 

 但这个位操作符的最大用途是使用两个按位非操作符来取代Math.floor操作,能够将任何浮点型数值转换成整形。如:

 

~~2 == Math.floor(2); //true 2
~~3.5 == Math.floor(3.5);//true 3
~~2.8 == Math.floor(2.8);//true 2

有人做了一个测试,关于两个按位非操作与Math.floor操作的执行效率问题,如下:

将100000个浮点型数值转换成整型 http://jsperf.com/jsfvsbitnot

# Browser Math.floor() Bitwise double NOT ~~
#1 Firefox 7.0.1 42ms 29ms
#2 Firefox 7.0.1 44ms 28ms
#3 Chrome 15 63ms 64ms
#4 Chrome 15 63ms 68ms
#5 IE8 265ms 192ms
#6 IE8 324ms 190ms

Performance difference between Math.floor() and JavaScript bitwise double NOT

使用两个按位非操作的场景:

 

  • 想要将一个浮点型转换成整型
  • 与Math.floor相同的操作,但执行更快些
  • 尽可能地减少代码量

不使用的场景:

 

  • 当游览器为Chrome的时候
  • 想让你的代码可读性好些
分享到:
评论

相关推荐

    js随时生成某个区间内的任意整数

    主要使用了一下两个javascript函数 1、Math.floor() 方法可对一个数进行下舍入 2、Math.random() 方法可返回介于 0 ~ 1 之间的一个随机数 例如我们要取a-b区间的数字,并赋值给lanrenzhijia变量,则...

    java随机数

    1.java.util.concurrent.ThreadLocalRandom.current().nextInt(10) 这个新的API综合了其他两种方法的优点:单一实例/静态访问,就像Math.random()一样灵活。ThreadLocalRandom也比其他任何处理高并发的方法要更快。 ...

    javascript自动生成包含数字与字符的随机字符串

    这里主要用到Math.random() 和 Math.floor() 两个函数 Math.random() — 返回0和1之间的伪随机数 可能为0,但总是小于1,[0,1) Math.floor() — 向下取整,舍掉小数字后的值 实现随机多位数的方法: 代码如下:/**...

    用js实现随机返回数组的一个元素

    [removed](test[Math.floor(Math.random()*test.length)]); setInterval(“location.reload()”,1000); //–&gt; [removed] 这是个奇妙的方法。适合做标题性质文字的随机轮换显示。 有两种不同的方式实现: 一、随机...

    xiaoxiaoxiao_lazyload-实现微信小程序图片懒加载特效.zip

    为何是Math.floor(i/2)呢,因为同一排两张图片高度一样,比如i=0和i=1,通过Math.floor得出值都为0,所以可以保证同一排的两张图片位置高度是同一个值。2)替换默认图片先看效果图片:wxml代码: src="{{arr[index]...

    js计算任意值之间随机数的方法

    此时就可以返回1到10的随机数了,但是我们返回的很多是小数,不符合要求,下面就用到了Math.floor()这个函数了,这个函数执行向下舍入,也就是说10.99经过Math.floor都是10,Math.ceil(是向上舍入)即使是1

    GuitarRatingApp:用于吉他选择的吉他商店评级系统应用程序。 使用 JavascriptCSSHTML 作为维尔纽斯格迪米纳斯技术大学的大学项目创建

    算法如何工作一开始,所有参与评分系统的图片都被分配了一个初始评分,同时也声明了变量,用于后续图片的无序随机展示。 var min = 1 ;var max = 18 ;var rb = Math . random ( ) &gt;= 0.5 ;var random = Math . floor...

    flash 打字游戏源码

    ball2._x = Math.floor(Math.random()*750); //此处运用一个语句switch...即可选择性调用函数... switch (moshi_txt.text) { case "小写练习" : //此处返回一个随机值... numb = random(26)+97; //此处不要忘...

    JavaScript的21条基本知识点

    1.JavaScript大小写敏感;2.声明变量如果不写var,则为声明了全局变量;任何不是方法的函数,都是全局...7.Math.floor()向下取整数,返回的值小于或等于该数,Math.floor(-5.9),返回-6;8.函数内部声明变量的时候,一

    计算工作日

    js两个日期之间的工作日数 [removed] //假日表 var holidays = new Array(); holidays[holidays.length] = new Date("2012/02/01"); holidays[holidays.length] = new Date("2012/02/03"); function ...

    javascript函数的解释

    40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在 值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor (Math.random()*(n+1))...

    js计算两个时间差 天 时 分 秒 毫秒的代码

    // 计算两个时间差 dateBegin 开始时间 function timeFn(dateBegin) { //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 var dateEnd = new Date();//获取当前时间 var dateDiff = dateEnd.getTime...

    验证码按回车不变解决方法

    结果在ie里面,怎么按回车都不变,显示的是同样的验证码,开两个ie也是一样。 因为平常用的是火狐,没有用ie测试,没有发现这个bug。 解决办法如下: 代码如下: [removed] $(“#yzm”).attr(“src”, “getyzm.aspx...

    107个常用javascript语句

    40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回 value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n 1))...

    JAVA笔试题集锦(1-30)基础部分

    答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个...

    java经典面试题汇总

    答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个...

    js保留两位小数方法总结

    本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况 var num =2.446242342...

    rock-paper-scissors-js:在简单的计算机上玩石头,剪刀,剪刀的经典游戏

    我学到的一些技术包括: 在编码之前计划我的程序区分常量和让变量创建一个简单的数组创建一个随机数生成器使用Math.floor()进行四舍五入,并给出产生从0开始到指定数字结束的随机数的机会均等使用Math.random()...

    javascript文档

    按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的各位向左移。 按位取非运算符 对一个表达式执行按位取非(求非)操作。 按位或运算符 (|) 对两个表达式指定按位或操作。 ...

    JScript 语言参考

    按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的各位向左移。 按位取非运算符 对一个表达式执行按位取非(求非)操作。 按位或运算符 (|) 对两个表达式指定按位或操作。 ...

Global site tag (gtag.js) - Google Analytics