【发布时间】:2018-05-17 09:37:12
【问题描述】:
我想问一下结果(s16Result)之间是否有差异
int16_t s16X, s16Y, s16Result;
s16Result = (int16_t) (s16X - s16Y);
和
int16_t s16X, s16Y, s16Result;
s16Result = (int16_t) ((uint16_t) s16X - (uint16_t) s16Y)
s16X 和 s16Y 的数据类型为有符号整数,因此范围为 -32767...32767 。谢谢。
【问题讨论】:
-
您应该能够轻松地制作一个测试程序,将其中一个值设为负值,然后查看两个操作的结果并进行比较。
-
@Someprogrammerdude:在一个 C 实现中测试一个程序中的一个样本并不能提供关于 C 标准一般要求的明确答案。
-
@EricPostpischil 不,但它应该给出一些提示。
-
@EricPostpischil 但仅一个示例表明它们不相等就足以说明它们不相等。现在会发生什么
-
@Someprogrammerdude:可能会也可能不会。一个示例最多提供一个可能的结果,而 C 标准可能允许多个可能的结果或无限多的结果(未定义的行为)。示例根本无法提供这些信息。
标签: c