C ++中的按位运算符和重载

时间:2018-09-13 14:10:44

标签: c++

我已经写了一些代码来打印一个整数值,该整数值升为整数。 为什么即使我输入了2个整数,该代码也会暂停输入?

#include<iostream>

int main(){
    int a, b;
    std::cin>>a>>b;
    std::cout<<std::endl<<a<<std::endl<<b<<std::endl;
    int c, d;
    c = a;
    d = 0;
    while(b){
        if(b&1)
            d += c;
        if(b>>1){
            b = b>>1;
            c *= c;
        }
    }

    std::cout<<d;
    return 0;
}

我怀疑编译器将按位运算符误解为重载运算符,但是即使我将while循环中的条件更改为

if(b/2 > 0){
    b = b/2;
    c *= c;
}

它仍然不起作用。我不知道这是怎么回事。我已经在终端和一些在线IDE中尝试了此代码,但是结果是相同的。

1 个答案:

答案 0 :(得分:1)

如前所述,您永远不会为b分配0值,因此循环永远不会结束。您可以将if测试替换为执行赋值的操作。

if(b >>= 1)
    c *= c;

b = b >> 1相比,我更喜欢这样做,因为很明显您是要分配的,而不是要比较b == b >> 1