c - 为什么返回 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;
}
解决方案
因为&
按位顺序比较位。对于每一对位,如果两者都为 1,则返回 1,否则返回 0。二进制中的 42 在其前面有一组隐含的零。
比较是
0000101010
1010101010
-----------
0000101010
推荐阅读
- python - 如何优化处理 pandas DataFrame 并提高代码的可读性?
- python - Python中的2D列表(行总计/总计)
- json - 如何从 Elm 0.19 中的本地主机地址读取 json?
- phpstorm - PhpStorm。通过逗号而不是“使用”自动导入命名空间
- javascript - 谷歌开发者工具 - 捕获网络截图记录
- javascript - 清除对函数的引用
- android - 为什么这个android动画没有做任何事情?
- c - 长文件路径的 stat 替代方法
- javascript - 未捕获的类型错误:无法读取未定义的属性“firstName”
- openssl - 从 ExpKey + Modkey 到 PEM