无法理解某些 c++
Cannot understand some c++
本文关键字:c++ 更新时间:2023-10-16
我正在看一个 c++ 中婴儿步巨步算法的例子,我不懂 c++,但我可以理解大部分程序,但是有两行我只是不确定它们的作用,
int powmod (int a, int b, int m) {
int res = 1;
while (b > 0)
if (b & 1) {
res = (res * a) % m;
--b;
}
else {
a = (a * a) % m;
b >>= 1;
}
return res % m;
}
有人可以解释一下(b & 1)
检查的第一个if
语句是什么,以及在else
语句中b >>= 1
为什么有两个'>'
运算符,这就是你在 c++ 中检查更大/等于的方式吗?谢谢
这:>>= 是右移赋值运算符,它在 b 上执行右移操作并将其重新分配给 b。>>= 1 基本上是 b 除以 2。
它将所有位 1 向右移动。
例如,如果二进制中的 b 是 00000010(十进制为 2),则 b>>= 1 将使 b = 00000001(十进制为 1)。 另一个EG2:00001110(14)将变为00000111(7)等 再这样做一次,你会失去精度:00000111(7)变成00000011(3)。
执行按位运算是右移运算符。
b >>= 1;
上述声明的意思是——
b = b >> 1;
这些是按位运算符。"&"符号表示 AND,在这种情况下,它将检查"b"的二进制表示形式与二进制表示形式为 1。">>="也是一个按位运算符,称为右移。
相关文章:
- 没有找到相关文章