02.二进制的计算
理解下面这个函数的计算
关于js中数字的位数
在 JavaScript 中,数字(无论是整数还是浮点数)在内存中的表示是 64 位双精度浮点数格式。 当使用 JavaScript 进行位运算(例如按位与、按位或等)时,操作数会临时被视为有符号的 32 位整数来处理,并按照这种格式进行计算。
lane模型中的二进制表示
js
export const NoLanes= 0b0000000000000000000000000000000;
export const NoLane=0b0000000000000000000000000000000;
export const SyncHydrationLane = 0b0000000000000000000000000000001;
export const SyncLane = 0b0000000000000000000000000000010;
...二进制的计算 (与、或、非、取反、异或、左移、右移...)
我们主要掌握,与、或、取反
js
// 与运算
0b0000001000000000000000000000000
& 0b0000010000000000000000000000000
-----------------------------------
0b0000000000000000000000000000000
// 或运算
0b0000001000000000000000000000000 A
| 0b0000010000000000000000000000000 B
-----------------------------------
0b0000011000000000000000000000000 C
// 取反运算
~ 0b0000001000000000000000000000000
-----------------------------------
0b1111110111111111111111111111111js
// 案例一: 清除标记
finishedWork.flags &= ~Placement;
//类比:C = C & ~B
0b0000011000000000000000000000000 C
& 0b1111101111111111111111111111111 ~B
-------------------------------------
0b0000001000000000000000000000000js
// 案例二:获取最右侧的1代表的值
A & -A
// ~A
~0b0000011000000000000000000000000 A
---------------------------------------------
0b1111100111111111111111111111111 ~A
// ~A + 1
0b1111100111111111111111111111111 ~A
+ 0b0000000000000000000000000000001 1
---------------------------------------------
0b0000001000000000000000000000000 ~A + 1
// A & (~A + 1)
0b0000001000000000000000000000000 ~A + 1
& 0b0000011000000000000000000000000 A
---------------------------------------------
0b0000001000000000000000000000000 A & (~A + 1) === A & -A