有人可以帮我理解这段代码的输出

时间:2017-05-19 19:21:06

标签: c

你好漂亮的人, 我需要帮助输出这个程序:

#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

  1. 第一次迭代:

    p = 0 + 16mod2,等于0

    t = 8

  2. 第二次迭代:

    p = 0 + 8mod2,等于0

    t = 4

  3. 第三次迭代:

    p = 0 + 4mod2,等于0

    t = 2

  4. 第四次迭代:

    p = 0 + 2mod2,等于0

    t = 1

  5. 输出应为0,但不知何故,当我运行代码时,我得到2。 有人可以帮我解决这个问题吗?还有其他任何需要考虑的情况,比如x = 0,y = 0或者x和y是&lt; 0?

3 个答案:

答案 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);