AVR C++ uint32_t 奇怪的行为

AVR C++ uint32_t weird behaviour

uint32_t a = 65536;
uint32_t b = 1 << 16;

为什么a != b在这里,但是

uint32_t a = 65536;
uint32_t b = 65536;

此处 a == b 虽然技术上应该相同?

我将 CLion 用作 IDE 并将 CMake 3.7.1 与 Arduino CMake 一起使用。

我必须将 1 转换为 uint32_t,以便有足够的字节将其移入。

uint32_t b = 1 << 16;

如您所见,如果您不首先将 1 转换为 32 位整数,则此操作会崩溃:

文字 1 是编译器的默认整数类型。不知道是哪个,但它是 8 位或 16 位整数。

现在,假设它是 16 位输入。当您将 1 左移 16 次时,您只是……好吧,这没有意义。所以,首先让你的 1 成为 32 位 int,然后再移位。