uint32_t a = 65536;
uint32_t b = 1 << 16;
为什么这里是a != b
,但是
uint32_t a = 65536;
uint32_t b = 65536;
这里虽然应该是相同的,但a == b
,涉及到IT技术相关内容。
我正在使用CLion作为IDE,并使用CMake 3.7.1与Arduino CMake。
uint32_t b = 1 << 16;
正如您所注意到的,如果不先将1转换为32位整数,则此方法会失效:
字面量1
是编译器上的默认整数类型。我们不知道该编译器是8位还是16位整型。
现在假设它是16位整型。当您将1左移16次时,这就变得毫无意义了。因此,请先将1
转换为32位整数,然后再进行移位操作。
stdint.h
中的 UINT32_C(1)
。 - ndim我需要将1转换为uint32_t类型,这样才有足够的字节进行移位操作。
1UL
。C语言有后缀可以改变字面量的类型。 - Zan Lynx