gpt4 book ai didi

javascript - 这个函数如何递增?

转载 作者:行者123 更新时间:2023-12-03 08:26:24 25 4
gpt4 key购买 nike

谁能解释一下下面的函数是如何递增的:

function increment (i) {
i ^= (i & ~-~i) | (~i & -~i)
return i
}

我想我知道 javascript,但是当我看到上面的内容时,我很生气。

最佳答案

bool 代数 101.

首先,假设我们正在使用 two's complement ,这是一元减号运算符 - 的定义(也请参见脚注):

-A = ~A + 1

这是您的 RHS 表达式,添加了一些额外的括号,没有快捷赋值,所有运算符都采用扩展形式以提高可读性:

i xor ((i and ~(-(~i))) or (~i and -(~i))

我们应用第一个关系:

i xor ((i and ~(~~i + 1)) or (~i and (~~i + 1))

补运算符~是幂等的,也就是说~~i等于i,所以我们化简:

i xor ((i and ~(i + 1)) or (~i and (i + 1)))

xor 运算符的第二项具有(X and ~Y) or (~X and Y) 形式,这意味着 “X 之一和 Y 必须为真才能使表达式为真,但不能同时为真”,这是异或 (xor) 的定义,因此我们可以将其替换为 X xor Y,获取:

i xor (i xor (i + 1))

我们改变关联(xor 是关联的)我们得到:

(i xor i) xor (i + 1)

i xor i 是矛盾的(总是false),所以我们得到:

false xor (i + 1)

请注意,false xor X 的真值完全取决于X,因此我们可以将上面的代码重写为:

i + 1

因此 RHS 的计算结果为 i + 1。我们在原来的代码中替换它,我们得到:

function increment(i) {
i = i + 1
return i
}

瞧!

注意:如果我们想要完全正式的话,+ 应该被正式化为另一个运算符。在这种情况下,我们可以安全地跳过定义并将其保留为黑盒,因为我们不需要它的任何属性。唯一重要的是 ~ 的优先级高于 +

关于javascript - 这个函数如何递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552349/

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