gpt4 book ai didi

无法理解此 C 代码片段中 (b&1) 的含义

转载 作者:行者123 更新时间:2023-12-04 10:43:12 25 4
gpt4 key购买 nike

inline ll modinv(ll a , ll b)
{
ll res=1;
while (b)
{
if(b&1)
res = (res*a)%mod;
a=(a*a)%mod;
b=b/2;
}
return res;
}

这是否意味着只有当 b==1 时条件才会满足。

最佳答案

在这种情况下,& 是一个按位运算符。当您执行 b&1 时,您有一个整数 b 表示十进制 13 和数字 1

         d7 d6 d5 d4 d3 d2 d1 d0
b = 13 = 0 0 0 0 1 1 0 1
1 = 0 0 0 0 0 0 0 1
----------------------- after bitwise and operator
0 0 0 0 0 0 0 1

b 的每一位之上,逻辑上是 & ed 与 1 二进制表示的相应位。因为整数之一是 1 ,它在 1 位置只有一个 d0 ,所以所有按位和运算符将在从 0d7 的所有位置计算 d1 ,并且因为结果中 d0 的结果将取决于存在于 d0 变量 b

所有奇数在其二进制表示中的 1 位置都有一个 d0。所有偶数在 0 位置的二进制表示中都有一个 d0

因此,这是一种检查 d0 中存在什么数字的方法。如果是 1 b&1 的结果将是 1 ,否则它将是 0 ,这将使我们能够确定整数是偶数还是奇数,在这种情况下。

尽管按位运算符的类似应用使您可以检查整数的哪一位是 10 ,在整数中设置特定位等。

编辑

@chux 提出了一些很好的观点,请参阅答案。注意一个人的补码问题(但可能你永远不会遇到它,除非你使用一些奇怪的硬件)。此外,现在,检查奇偶模运算符会更好,因为好的编译器可以生成高效的代码。

关于无法理解此 C 代码片段中 (b&1) 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517336/

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