无法理解某些 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。">>="也是一个按位运算符,称为右移。

相关文章:
  • 没有找到相关文章