位运算
#
二进制
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 = a
a ^ a = 0
a ^ b ^ a = b ^ (a ^ a) = b ^ 0 = b