C 为什么返回的是42而不是682?

C 为什么返回的是42而不是682?,c,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;
}


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

比较是

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

&
返回公共位:(101010-->42)它给出了什么输出?你到底期望什么?@Jerry Singh我想在这里工作五年多的时间里,你应该已经学会了位运算符&是如何工作的了。@David-Gotcha,我想他们会把前导的零补上。我想我可以将它向左移动,然后反向移动,尽管我认为这可能不是最好的方法。谢谢。这个网站让我讨厌我自己。我想我应该改用XOR