首页 > 解决方案 > 为什么返回 42 而不是 682?

问题描述

使用 C 中的位。我正在尝试创建一个函数,该函数在较大的位串中查找特定的位串。我的想法是使用 & 运算符比较两者,然后将字符串左移并重复。如果运算符返回较大的数字(因为不应更改任何位),则已找到该模式。不幸的是,这似乎是一个有缺陷的方法,因为我已经缩小到当这种情况发生时它实际上返回较小的字符串,使我认为我知道的内容受到质疑。

我想我的猜测是在执行此操作时实际上并没有添加前面的零,但我担心在我的编码中合理化错误的理论,所以我在这里。请解释一下,我发现的所有资源都没有真正解决这里发生的事情。提前致谢。

int main (void)
{
    unsigned int x = 682;   //      1010101010
    unsigned int pattern = 42; //       101010
    unsigned int temp;

    temp = x & pattern;
    printf("%i\n", temp);

    return 0;
}

标签: c

解决方案


因为&按位顺序比较位。对于每一对位,如果两者都为 1,则返回 1,否则返回 0。二进制中的 42 在其前面有一组隐含的零。

比较是

0000101010
1010101010
-----------
0000101010

推荐阅读