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。
答案 0 :(得分:5)
uint32_t b = 1 << 16;
正如您所注意到的,如果您不首先将1转换为32位整数,则会出现故障:
文字1
是编译器的默认整数类型。不知道哪个,但它是8位或16位int。
现在,假设它是16位。当你向左移动16次时,你只是......好吧,它没有意义。所以,先让1
为32位int,然后再移位。
答案 1 :(得分:2)
我必须将1转换为uint32_t,以便有足够的字节将其移入。