[英]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.