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