Ivan Kramarchuk Asked:2020-05-05 03:22:09 +0000 UTC2020-05-05 03:22:09 +0000 UTC 2020-05-05 03:22:09 +0000 UTC 以下表达式的作用是:(n & (n - 1)) != 0 772 在 Yandex 的“iOS 移动应用程序开发人员”职位描述中,有一个问题: 解释以下表达式的作用:(n & (n - 1)) != 0 objective-c 3 个回答 Voted Best Answer Разработчик Разработчик 2020-05-05T03:26:42Z2020-05-05T03:26:42Z 让我们回到基础... A & B == 0 是什么意思?...这意味着 A 和 B 在相同位置不包含 1 位。 会发生什么? 当您减去一个时,请查看最低有效位。您将用 0 替换 1。但是如果有 0,则必须从最高有效位借位。您将每一位从 0 更改为 1,直到变为 1。然后将 1 反转为 0,就完成了。因此,我们可以说 n - 1 将在某些位中匹配 n,只是 n 中的前导零对应于 n - 1 中的 1,而 n 中的最后一位在 n - 1 中变为零。 n & (n - 1) !== 0 是什么意思? n并且n - 1不包含通用单位。假设它们看起来像: n = abcde1000 n - 1 = abcde0111 abcde 必须是零位,即 n 是000001000. 因此,n 的值是 2 的幂。 所以,我们的答案((n & (n-1)) !== 0)是:如果 n 不是 2 的幂且不等于 0,则逻辑表达式为真。 Vlad from Moscow 2020-05-05T03:24:58Z2020-05-05T03:24:58Z 这个表情 (n & (n - 1)) != 0 检查一个数字是否n包含多个设置为 1 的位。 ampawd 2020-05-05T03:26:50Z2020-05-05T03:26:50Z 这就是它检查数字是否为n2 的幂的方式,因为恰恰是这样的数字在二进制表示中只有一位
让我们回到基础...
A & B == 0 是什么意思?...这意味着 A 和 B 在相同位置不包含 1 位。
会发生什么?
当您减去一个时,请查看最低有效位。您将用 0 替换 1。但是如果有 0,则必须从最高有效位借位。您将每一位从 0 更改为 1,直到变为 1。然后将 1 反转为 0,就完成了。因此,我们可以说 n - 1 将在某些位中匹配 n,只是 n 中的前导零对应于 n - 1 中的 1,而 n 中的最后一位在 n - 1 中变为零。
n & (n - 1) !== 0 是什么意思?
n并且n - 1不包含通用单位。假设它们看起来像:abcde 必须是零位,即 n 是
000001000. 因此,n 的值是 2 的幂。所以,我们的答案
((n & (n-1)) !== 0)是:如果 n 不是 2 的幂且不等于 0,则逻辑表达式为真。这个表情
检查一个数字是否
n包含多个设置为 1 的位。这就是它检查数字是否为
n2 的幂的方式,因为恰恰是这样的数字在二进制表示中只有一位