簡體   English   中英

C ++中的按位運算符和重載

[英]Bitwise operators in c++ and overloading

我已經寫了一些代碼來打印一個整數值,該整數值被提高為整數冪。 為什么即使我輸入了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中嘗試了此代碼,但是結果是相同的。

std::cin>>a>>b; 分組為(std::cin>>a)>>b; 因此請確保讀取兩個整數。

您的問題是,如果b為0以外的任何值,程序就會循環執行。

如前所述,您永遠不會為b分配0值,因此循環永遠不會結束。 您可以將if測試替換為執行賦值的操作。

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

我更喜歡b = b >> 1 ,因為更明顯的是您要分配,而不是要比較b == b >> 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM