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