位操作符在我们编码过程中是容易被遗忘的,可能更多的源于我们并不知道这些操作究竟代表什么,或者有什么样的作用,位操作符主要涉及有按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、有符号右移(>>)、无符号右移(>>>),本文主要讲的是按位非(~)。
关于这个位操作的原理,大家可以参考这里。
按位非(~)操作对数值进行操作后,结果为-(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的时候
- 想让你的代码可读性好些
相关推荐
在Java编程语言中,`Math`类提供了几个用于处理数值的静态方法,其中包括`Math.round()`, `Math.ceil()`, 和 `Math.floor()`。这些方法主要用于处理浮点数,将它们转换成整数,但每种方法的取整策略不同。下面我们将...
`Math.random()`和`Math.floor()`是JavaScript提供的两个关键函数,它们可以帮助我们实现这一目标。本文将深入探讨如何结合这两个方法来生成指定范围内的随机整数。 `Math.random()`函数是JavaScript内置的全局函数...
需要注意的是,对于那些恰好处于两个整数中间的数(如5.5),`Math.round()`的处理方式取决于实现。在大多数情况下,JavaScript会将其向上取整。 #### Math.floor() `Math.floor()`函数返回小于或等于一个指定数字...
这些函数通常接受一个或两个double类型的参数,并返回一个double类型的结果。例如,acos()函数计算其参数的反余弦值,asin()计算反正弦值,atan()计算反正切值。此外,atan2()函数根据给定的x和y坐标计算点(x,y)在...
同样地,对于负数,这两个方法会反向作用,`Math.ceil(-9.1)`为-9,`Math.floor(-9.1)`为-10。 Math.min()和Math.max()是用于比较两个数并返回较小或较大值的函数。例如,`Math.min(9, 8)`将输出8,因为8是较小的数...
4. `Math.max()`和`Math.min()`:这两个方法分别用于返回两个数中的最大值和最小值。例如,`Math.max(5, 10)`返回10,`Math.min(-1, 0)`返回-1。 5. `Math.rint()`:该方法返回最接近给定参数的整数,如果结果在两...
6. math.atan2(y, x) 函数:返回 y/x 的反正切值,但和 atan 不同,atan2 可以接受两个参数,能够处理 x 和 y 同时为0的情况,并且可以确定结果的角度所在的象限。 7. math.atanh(x) 函数:返回参数 x 的反双曲正切...
### C语言math.h文件使用说明及...这个程序首先定义了两个变量`x`和`y`,然后使用了`fabs`、`sqrt`、`pow`、`cos`和`erf`函数来演示这些函数的功能。通过这个简单的示例,我们可以看到`math.h`提供的强大数学计算能力。
14. `math.gcd(a, b)`:计算两个数的最大公约数。例如,`math.gcd(8, 6)`返回2,因为8和6的最大公约数是2。 15. `math.hypot(x, y)`:计算直角坐标系中(x, y)两点之间的欧几里得距离,也就是点到原点的直线距离。...
max() 方法返回两个数字中的最大值,而 min() 方法返回两个数字中的最小值。例如: * Math.max(10, 20) == 20 * Math.min(10, 20) == 10 rint() 方法 rint() 方法返回最接近给定数字的整数值。例如: * Math....
`Math.max()`和`Math.min()`分别用于找到两个数值中的最大值和最小值。 #### Math.random() `Math.random()`方法返回一个介于0(包括)到1(不包括)之间的伪随机数。这对于模拟、游戏开发和其他需要随机性的情况...
这两个函数分别用于向上取整和向下取整,即`Math.ceil(3.2)`会返回4,而`Math.floor(3.8)`则返回3。它们在处理像素坐标、游戏计分板等需要整数值的场合十分实用。 #### 5. Math.cos()与Math.sin() `Math.cos()`和`...
例如,`num.toFixed(2)`会返回一个字符串,精确到两位小数。然而,需要注意的是,`toFixed`并不改变原始数值,而是返回一个格式化的字符串,因此在进行进一步计算时需要将结果转换回数字(如使用`parseFloat`)。 3...
此方法返回两个32位整数的乘积,结果为64位整数。 **示例:** ```csharp long product = Math.BigMul(2147483647, 2147483647); ``` #### 7. Ceiling - 向上取整 **定义:** `public static double Ceiling(double...
对于整数除法和取余操作,可以使用`math.floor division`和`math.fmod(x, y)`,后者返回的是x除以y的余数。 此外,`math`模块还包含了处理浮点数精度和比较的函数,比如`math.isclose(a, b, *, rel_tol=1e-09, abs_...
与`Math.floor()`相反,`Math.ceil()`方法返回不小于参数a的最小整数。这意味着它会将传入的浮点数向上取整到最接近的整数,但不低于原始数值。 **示例:** ```java System.out.println(Math.ceil(1.4)); // 输出 ...
7. **Math.max()** 和 **Math.min()**:这两个方法分别用于找出两个数中的较大值和较小值。例如,`Math.max(5, 10)`返回10,而`Math.min(3, 7)`返回3。 8. **Math.random()**:这个方法生成一个0到1(包括0但不包括...
18. `IEEEremainder(double f1, double f2)`: 根据IEEE 754标准计算两个数的余数。例如: - `Math.IEEEremainder(10, 3)` 返回 `1.0` 19. `log(double a)`: 返回`a`的自然对数。例如: - `Math.log(10)` 返回 `2....
主要使用了一下两个javascript函数 1、Math.floor() 方法可对一个数进行下舍入 2、Math.random() 方法可返回介于 0 ~ 1 之间的一个随机数 例如我们要取a-b区间的数字,并赋值给lanrenzhijia变量,则...