AVR C ++ uint32_t奇怪的行为

时间:2017-08-06 22:03:43

标签: c++ avr

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

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

uint32_t a = 65536;
uint32_t b = 65536;

这里a == b虽然它在技术上应该是一样的吗?

我使用CLion作为IDE,使用带有Arduino CMake的CMake 3.7.1。

2 个答案:

答案 0 :(得分:5)

uint32_t b = 1 << 16;

正如您所注意到的,如果您不首先将1转换为32位整数,则会出现故障:

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

现在,假设它是16位。当你向左移动16次时,你只是......好吧,它没有意义。所以,先让1为32位int,然后再移位。

答案 1 :(得分:2)

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