位操作符在我们编码过程中是容易被遗忘的,可能更多的源于我们并不知道这些操作究竟代表什么,或者有什么样的作用,位操作符主要涉及有按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>),本文主要讲的是按位非(~)。
关于这个位操作的原理,大家可以参考这里。
按位非(~)操作对数值进行操作后,结果为-(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
#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 |
使用两个按位非操作的场景:
- 想要将一个浮点型转换成整型
- 与Math.floor相同的操作,但执行更快些
- 尽可能地减少代码量
不使用的场景:
- 当游览器为Chrome的时候
- 想让你的代码可读性好些
相关推荐
主要使用了一下两个javascript函数 1、Math.floor() 方法可对一个数进行下舍入 2、Math.random() 方法可返回介于 0 ~ 1 之间的一个随机数 例如我们要取a-b区间的数字,并赋值给lanrenzhijia变量,则...
1.java.util.concurrent.ThreadLocalRandom.current().nextInt(10) 这个新的API综合了其他两种方法的优点:单一实例/静态访问,就像Math.random()一样灵活。ThreadLocalRandom也比其他任何处理高并发的方法要更快。 ...
这里主要用到Math.random() 和 Math.floor() 两个函数 Math.random() — 返回0和1之间的伪随机数 可能为0,但总是小于1,[0,1) Math.floor() — 向下取整,舍掉小数字后的值 实现随机多位数的方法: 代码如下:/**...
[removed](test[Math.floor(Math.random()*test.length)]); setInterval(“location.reload()”,1000); //–> [removed] 这是个奇妙的方法。适合做标题性质文字的随机轮换显示。 有两种不同的方式实现: 一、随机...
为何是Math.floor(i/2)呢,因为同一排两张图片高度一样,比如i=0和i=1,通过Math.floor得出值都为0,所以可以保证同一排的两张图片位置高度是同一个值。2)替换默认图片先看效果图片:wxml代码: src="{{arr[index]...
此时就可以返回1到10的随机数了,但是我们返回的很多是小数,不符合要求,下面就用到了Math.floor()这个函数了,这个函数执行向下舍入,也就是说10.99经过Math.floor都是10,Math.ceil(是向上舍入)即使是1
算法如何工作一开始,所有参与评分系统的图片都被分配了一个初始评分,同时也声明了变量,用于后续图片的无序随机展示。 var min = 1 ;var max = 18 ;var rb = Math . random ( ) >= 0.5 ;var random = Math . floor...
ball2._x = Math.floor(Math.random()*750); //此处运用一个语句switch...即可选择性调用函数... switch (moshi_txt.text) { case "小写练习" : //此处返回一个随机值... numb = random(26)+97; //此处不要忘...
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 ...
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在 值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor (Math.random()*(n+1))...
// 计算两个时间差 dateBegin 开始时间 function timeFn(dateBegin) { //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 var dateEnd = new Date();//获取当前时间 var dateDiff = dateEnd.getTime...
结果在ie里面,怎么按回车都不变,显示的是同样的验证码,开两个ie也是一样。 因为平常用的是火狐,没有用ie测试,没有发现这个bug。 解决办法如下: 代码如下: [removed] $(“#yzm”).attr(“src”, “getyzm.aspx...
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回 value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n 1))...
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个...
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个...
本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况 var num =2.446242342...
我学到的一些技术包括: 在编码之前计划我的程序区分常量和让变量创建一个简单的数组创建一个随机数生成器使用Math.floor()进行四舍五入,并给出产生从0开始到指定数字结束的随机数的机会均等使用Math.random()...
按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的各位向左移。 按位取非运算符 对一个表达式执行按位取非(求非)操作。 按位或运算符 (|) 对两个表达式指定按位或操作。 ...
按位与运算符 (&) 对两个表达式执行按位与操作。 按位左移运算符() 将一个表达式的各位向左移。 按位取非运算符 对一个表达式执行按位取非(求非)操作。 按位或运算符 (|) 对两个表达式指定按位或操作。 ...