你好漂亮的人, 我需要帮助输出这个程序:
#include <stdio.h>
int main() {
int x,y;
scanf("%d %d",&x,&y);
int t = x^y;
int p = 0;
while (t > 0) {
p += t%2;
t /= 2;
}
printf("%d", p);
return 0;
}
我试着把它写在纸上并手工完成一些工作。 所以我写了这个:
假设x = 2且y = 4
第一次迭代:
p = 0 + 16mod2,等于0
t = 8
第二次迭代:
p = 0 + 8mod2,等于0
t = 4
第三次迭代:
p = 0 + 4mod2,等于0
t = 2
第四次迭代:
p = 0 + 2mod2,等于0
t = 1
输出应为0,但不知何故,当我运行代码时,我得到2。 有人可以帮我解决这个问题吗?还有其他任何需要考虑的情况,比如x = 0,y = 0或者x和y是&lt; 0?
答案 0 :(得分:2)
这里的问题是,您假设2^4 == 16
,实际上只有6
,因为^
运算符实际上是XOR
。< / p>
您应该使用
int t = pow(x, y)
答案 1 :(得分:0)
int t = x^y;
不是“x
提升到y
”的力量。它是“x
XOR y
”。在你的例子中,T从6开始。
答案 2 :(得分:0)
正如其他人提到的那样x ^ y是XOR
操作,你的想法是:
#include <math.h>
....
int t = pow(x,y);