我很惊讶为什么得到不同的结果。
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)算术求值。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |