无法理解一些c ++

时间:2016-03-15 14:36:56

标签: c++

我正在看一个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;
}

有人可以解释第一个if语句(b & 1)正在检查的内容,以及else语句中b >>= 1为什么有两个'>'运算符,这是你在c ++中检查更大/相等的方法吗?谢谢

3 个答案:

答案 0 :(得分:1)

这:>> =是右移赋值运算符,它对b执行右移操作并将其重新分配给b。 >> = 1基本上将b除以2.

它将所有位1向右移动。

例如,如果二进制中的b是00000010(十进制中的2),则b>> = 1将使b = 00000001(十进制中的1)。另一个eg2:00001110(14)将变为00000111(7)等但是再次这样做会丢失精度:00000111(7)变为00000011(3)。

答案 1 :(得分:0)

执行按位操作是right shift operator

b >>= 1;

以上陈述意味着 -

b = b >> 1;

答案 2 :(得分:0)

这些是按位运算符。 '&'符号表示AND,在这种情况下将检查'b'的二进制表示,其二进制表示为1.'>> ='也是一个称为右移的按位运算符。