Я знаю ответ на эту программу, но я не понимаю, почему? - PullRequest
0 голосов
/ 19 февраля 2019

Я понимаю, что есть сдвиги влево и вправо, но как оно меняется от 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 голосов
/ 19 февраля 2019

Просто напишите все на бумаге в двоичном виде, чтобы понять это, например:

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 ... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...