我正在看一个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 ++中检查更大/相等的方法吗?谢谢
答案 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)
答案 2 :(得分:0)
这些是按位运算符。 '&'符号表示AND,在这种情况下将检查'b'的二进制表示,其二进制表示为1.'>> ='也是一个称为右移的按位运算符。