Получение 0x55555555 только с использованием чисел меньше 0xFF, |и < - PullRequest
2 голосов
/ 01 ноября 2019

Очень простая проблема практики, которая по какой-то причине сильно смущает меня. У меня есть номер 0x55555555, который я хочу получить в C, используя только побитовые операторы |и <<. Вы также можете использовать любое число меньше 0xFF как часть смены / или. Наконец, нужно использовать менее 6 операторов, поэтому я не могу просто посылать спам по одному, а затем |с 5. </p>

Для меня проблема в том, что я пытаюсь понять, как заставить 5/0101 повторяться. Конечно, я могу просто сдвинуть 5, но это оставляет 0, например, это (5 << 4 -> 0101 0000).

int test () {return (5<<21);}

1 Ответ

3 голосов
/ 01 ноября 2019
uint32_t _55 = 0x55;
uint32_t _5555 = (_55 << 8) | _55;
uint32_t _55555555 = (_5555 << 16) | _5555;
...