我很惊讶为什么得到不同的结果。
uint16_t wCaptureTime = 35;
wDeltaTime1 = (uint16_t) - (int16_t)wCaptureTime;
wDeltaTime2 = 0xFFFF - (int16_t)wCaptureTime;
printf("wDeltaTime1 %d \n", wDeltaTime1);
printf("wDeltaTime2 %d \n", wDeltaTime2);
Run Code Online (Sandbox Code Playgroud)
该代码导致:
wDeltaTime1 65501
wDeltaTime2 65500
Run Code Online (Sandbox Code Playgroud)
有人可以解释或提供一些链接以了解该行为。
该(uint16_t)
表达式中的(uint16_t) - (int16_t)wCaptureTime
是一个铸件。什么时候-35
投向uint16_t
你-35 + 65536
,那是65501
。
如果sizeof(int)
是2,则0xFFFF - (int16_t)wCaptureTime
是65535 - 35
在unsigned
算术这是65500
。如果sizeof(int)
为4,则将获得相同的结果,尽管该表达式将以有符号(int
)算术求值。