【发布时间】:2019-02-18 17:49:35
【问题描述】:
uint32_t a = 0xFF << 8;
uint32_t b = 0xFF;
uint32_t c = b << 8;
我正在为 Uno(1.0.x 和 1.5)编译,很明显 a 和 c 应该是相同的值,但它们不是......至少在运行时不会目标。我在主机上编译相同的代码,没有问题。
右移工作正常,左移仅在我移动变量与常量时才有效。
谁能证实这一点?
我在 VS2013 中使用 Visual Micro。使用 1.0.x 或 1.5 Arduino 编译会导致同样的失败。
编辑:
在目标上:
A = 0xFFFFFF00
C = 0x0000FF00
【问题讨论】:
-
他们的价值观是什么?
-
相关平台上的默认整数大小是多少?
b在赋值时被提升为 32 位值,因此当您稍后将其向左移动时,不会出现溢出问题。如果默认整数大小为 8 位,则对a的赋值将溢出。 -
我无法确认这一点。在 Eclipse 中,a 和 c 的值都为
0xFF00。 -
您实际获得了哪些价值?第一个值是否有可能符号扩展为 0xFFFFFF00?
-
@LouisNewstrom 如果 Eclipse 使用本机 gcc,那么您的结果与我的主机匹配。这是有问题的目标。
标签: c++ arduino integer arduino-uno