获取 0x55555555 仅使用小于 0xFF 的数字,|和<<

Getting 0x55555555 just using numbers less then 0xFF, | and <<

非常基本的练习题,出于某种原因让我非常困惑。 我有一个数字 0x55555555,我想在 C 中仅使用按位运算符 |和<<。您还可以使用任何小于 0xFF 的数字作为 shift/or 的一部分。最后,必须使用少于 6 个运算符,所以我不能一次只垃圾邮件轮班一个然后 | 5.

我的问题是我正在努力弄清楚如何让 5/0101 重复。我当然可以将 5 移过去,但是这样只会留下 0,例如 (5<<4 -> 0101 0000)。

int test () {return (5<<21);}
uint32_t _55 = 0x55;
uint32_t _5555 = (_55 << 8) | _55;
uint32_t _55555555 = (_5555 << 16) | _5555;