`

两个按位非操作与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的时候
  • 想让你的代码可读性好些
分享到:
评论

相关推荐

    Java Math.round(),Math.ceil(),Math.floor()的区别详解

    在Java编程语言中,`Math`类提供了几个用于处理数值的静态方法,其中包括`Math.round()`, `Math.ceil()`, 和 `Math.floor()`。这些方法主要用于处理浮点数,将它们转换成整数,但每种方法的取整策略不同。下面我们将...

    使用Math.floor与Math.random取随机整数的方法详解

    `Math.random()`和`Math.floor()`是JavaScript提供的两个关键函数,它们可以帮助我们实现这一目标。本文将深入探讨如何结合这两个方法来生成指定范围内的随机整数。 `Math.random()`函数是JavaScript内置的全局函数...

    Js中Math方法的使用

    需要注意的是,对于那些恰好处于两个整数中间的数(如5.5),`Math.round()`的处理方式取决于实现。在大多数情况下,JavaScript会将其向上取整。 #### Math.floor() `Math.floor()`函数返回小于或等于一个指定数字...

    c标准库

    这些函数通常接受一个或两个double类型的参数,并返回一个double类型的结果。例如,acos()函数计算其参数的反余弦值,asin()计算反正弦值,atan()计算反正切值。此外,atan2()函数根据给定的x和y坐标计算点(x,y)在...

    肯定能用得上的Math对象

    同样地,对于负数,这两个方法会反向作用,`Math.ceil(-9.1)`为-9,`Math.floor(-9.1)`为-10。 Math.min()和Math.max()是用于比较两个数并返回较小或较大值的函数。例如,`Math.min(9, 8)`将输出8,因为8是较小的数...

    java中math类[文].pdf

    4. `Math.max()`和`Math.min()`:这两个方法分别用于返回两个数中的最大值和最小值。例如,`Math.max(5, 10)`返回10,`Math.min(-1, 0)`返回-1。 5. `Math.rint()`:该方法返回最接近给定参数的整数,如果结果在两...

    python中math模块函数.pdf

    6. math.atan2(y, x) 函数:返回 y/x 的反正切值,但和 atan 不同,atan2 可以接受两个参数,能够处理 x 和 y 同时为0的情况,并且可以确定结果的角度所在的象限。 7. math.atanh(x) 函数:返回参数 x 的反双曲正切...

    C语言math.h文件使用说明及相应示例程序

    ### C语言math.h文件使用说明及...这个程序首先定义了两个变量`x`和`y`,然后使用了`fabs`、`sqrt`、`pow`、`cos`和`erf`函数来演示这些函数的功能。通过这个简单的示例,我们可以看到`math.h`提供的强大数学计算能力。

    Python基础教程:math库常用函数.pdf

    14. `math.gcd(a, b)`:计算两个数的最大公约数。例如,`math.gcd(8, 6)`返回2,因为8和6的最大公约数是2。 15. `math.hypot(x, y)`:计算直角坐标系中(x, y)两点之间的欧几里得距离,也就是点到原点的直线距离。...

    java中math类.docx

    max() 方法返回两个数字中的最大值,而 min() 方法返回两个数字中的最小值。例如: * Math.max(10, 20) == 20 * Math.min(10, 20) == 10 rint() 方法 rint() 方法返回最接近给定数字的整数值。例如: * Math....

    java中math类的使用

    `Math.max()`和`Math.min()`分别用于找到两个数值中的最大值和最小值。 #### Math.random() `Math.random()`方法返回一个介于0(包括)到1(不包括)之间的伪随机数。这对于模拟、游戏开发和其他需要随机性的情况...

    as入门数学函数--Math类

    这两个函数分别用于向上取整和向下取整,即`Math.ceil(3.2)`会返回4,而`Math.floor(3.8)`则返回3。它们在处理像素坐标、游戏计分板等需要整数值的场合十分实用。 #### 5. Math.cos()与Math.sin() `Math.cos()`和`...

    JS精度计算1、转成整数计算再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

    例如,`num.toFixed(2)`会返回一个字符串,精确到两位小数。然而,需要注意的是,`toFixed`并不改变原始数值,而是返回一个格式化的字符串,因此在进行进一步计算时需要将结果转换回数字(如使用`parseFloat`)。 3...

    c#里的math类

    此方法返回两个32位整数的乘积,结果为64位整数。 **示例:** ```csharp long product = Math.BigMul(2147483647, 2147483647); ``` #### 7. Ceiling - 向上取整 **定义:** `public static double Ceiling(double...

    Python math模块总结.docx

    对于整数除法和取余操作,可以使用`math.floor division`和`math.fmod(x, y)`,后者返回的是x除以y的余数。 此外,`math`模块还包含了处理浮点数精度和比较的函数,比如`math.isclose(a, b, *, rel_tol=1e-09, abs_...

    Java中Math类的常用方法

    与`Math.floor()`相反,`Math.ceil()`方法返回不小于参数a的最小整数。这意味着它会将传入的浮点数向上取整到最接近的整数,但不低于原始数值。 **示例:** ```java System.out.println(Math.ceil(1.4)); // 输出 ...

    面试题: Java Math类常见的数学运算和用法

    7. **Math.max()** 和 **Math.min()**:这两个方法分别用于找出两个数中的较大值和较小值。例如,`Math.max(5, 10)`返回10,而`Math.min(3, 7)`返回3。 8. **Math.random()**:这个方法生成一个0到1(包括0但不包括...

    java中math类.pdf

    18. `IEEEremainder(double f1, double f2)`: 根据IEEE 754标准计算两个数的余数。例如: - `Math.IEEEremainder(10, 3)` 返回 `1.0` 19. `log(double a)`: 返回`a`的自然对数。例如: - `Math.log(10)` 返回 `2....

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

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

Global site tag (gtag.js) - Google Analytics