我知道该程序的答案,但我不明白为什么?

时间:2019-02-18 23:46:24

标签: 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 个答案:

答案 0 :(得分:3)

只需将所有内容写成二进制文件即可理解,就像这样:

1 = 0000 0001

i:1 ... 0000 0010 | 0000 0001 = 0000 0011(十六进制:3)

i:2 ... 0000 1100 | 0000 0001 = 0000 1101(十六进制:d)

i:3 ... 0110 1000 | 0000 0001 = 0110 1001(十六进制:69)

i:4 ...等等