gpt4 book ai didi

angular - Typescript 中的按位运算

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:21 24 4
gpt4 key购买 nike

阅读一篇关于 Angular 的变化检测机制的文章我遇到了这个 typescript 代码:

detach(): void { this._view.state &= ~ViewState.ChecksEnabled; }

我一直在努力思考那行代码。

我知道 ~ 技巧以及它如何与 indexOf() 一起使用。我发现很难用位来理解,但请记住它可以用 -(x+1) 代替,因此只使 -1 falsy 变得更容易。

似乎 ViewState.ChecksEnabled 是一个 bool 值,所以 ~ViewState.ChecksEnabled 给出 -(0 + 1) 或 -(1 + 1)

然后用&=按位赋值(?)我们得到

this._view.state = this._view.state & -1; // or -2

这里有什么技巧?

https://github.com/angular/angular/blob/6b79ab5abec8b5a4b43d563ce65f032990b3e3bc/packages/core/src/view/view.ts#L346

最佳答案

我认为您应该将其视为二元微积分。

假设 _view.state 等于 1,并且 ViewState.ChecksEnabled 等于 1。

我们有两个位运算符:

  • & 将对等于 1 的相应位执行与运算
  • ~ 将反转位

所以有了“重写”的操作,我们有:

var = 1 & ~ 1

我们应用波浪号:

var = 1 & 0

然后是 AND :

var = 0

这将给出一个简单的零。如果您应用此 _view.state 等于 0,那将给出:

var = 0 & ~1 = 0 & 0 = 0

当你使用 0, 0 时:

var = 0 & ~0 = 0 & 1 = 0

和 1, 0 :

var = 1 & ~0 = 1 & 1 = 1

总结一下:

0, 0 → 0
0, 1 → 0
1, 0 → 1
1, 1 → 0

您还可以创建一个沙箱来测试多个数字:

for (const i of [0, 1, 2, 3, 4]) {
for (const j of [0, 1, 2, 3, 4]) {
console.log(`${i} & ~${j} = ${ i & ~j }`);
}
}

关于angular - Typescript 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54743210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com