位运算
二进制#
javaScript的number类型是双精确度(64位)。位运算是32位运算。
0.1 + 0.2 !== 0.3#
原因#
因为JavaScript是遵守 IEEE 754 标准,数字的范围在:-(2^53 -1)至 2^53 -1,是有穷尽的,所以在0.1 + 0.2转换为二进制之后,会失去原有的精确度。
解决方法#
- 乘一个较大的数,再除这个数
- 使用es6中的变量,
Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。引入一个这么小的量的目的,在于为浮点数计算,设置一个误差范围。我们知道浮点数计算是不精确的。因此,Number.EPSILON的实质是一个可以接受的最小误差范围。
32位#
将10进制的数字,转换为2进制,且表现形式为32位
32为的最小值到最大值:-2^31 ~ 2^31 - 1
十进制转二进制#
二进制转十进制#
位运算符#
<< 左移#
>> 有符号右移#
带符号右移,移动后补位的是符号位:正数补0,负数补1
>>> 无符号右移#
无符号右移,移动后补位的是0
~ 取反#
0变1
| 或#
只要有一个是1就为1
& 与#
两个都是1才是1
^ 异或#
相同为0,不同为1
常见套路#
2倍#
取相反数#
不用多余变量交换#
tip
可以得出下面的结论:
a ^ 0 = aa ^ a = 0a ^ b ^ a = b ^ (a ^ a) = b ^ 0 = b
