c - 我知道这个程序的答案,但我不明白为什么?
问题描述
我知道 ii 和 x 向左移动有一个增量,但它是如何从 1 变为 3 的?然后从13(D)到69?等等...
#include <stdio.h>
int main()
{
int x = 1;
int ii;
for (ii = 0; ii < 8; ii++) {
x = (x << ii) | 1;
printf("0x%.8X\n", x);
}
return (0);
}
这是输出
0x00000001 0x00000003 0x0000000D 0x00000069 0x00000691 0x0000D221 0x00348841 0x1A442081
解决方案
只需将所有内容以二进制形式写在纸上即可理解,如下所示:
1 = 0000 0001
我:1 ... 0000 0010 | 0000 0001 = 0000 0011(十六进制:3)
我:2 ... 0000 1100 | 0000 0001 = 0000 1101(十六进制:d)
我:3 ... 0110 1000 | 0000 0001 = 0110 1001(十六进制:69)
我:4 ...等。
推荐阅读
- javascript - 如何使用任何其他关注者列表中的javascript动态单击instagram上的关注按钮?
- java - WSDL 客户端调用失败
- azure-functions - 为什么“重播”的行为可以确保 Azure 持久函数中的可靠执行?
- amazon-web-services - 尝试使用 golang 在 cloudwatch 上放置 LogEvents 时出现 SerializationException
- python - 如何在 folium 中添加两个 choropleth 层并让它们像一个特征组一样工作?
- c# - 隐藏“编辑”按钮上的下拉列表并显示“添加”按钮单击
- swift - 具有通用方法的 Swift 协议:无效的重新声明实现
- notifications - 如何使用 Flutter 向 OneSignal 发送标签或数据
- javascript - 如果在选定标签中选择了值,则希望从数据库中获取多个详细信息
- android - 按钮没有显示任何颜色..即使是默认的