首页 > 解决方案 > 我知道这个程序的答案,但我不明白为什么?

问题描述

我知道 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

标签: c

解决方案


只需将所有内容以二进制形式写在纸上即可理解,如下所示:

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 ...等。


推荐阅读