假设我有这两种类型:
typedef unsigned long long uint64;
typedef signed long long sint64;
我有这些变量:
uint64 a = ...;
uint64 b = ...;
sint64 c;
我想从 a 中减去 b 并将结果分配给 c,很明显,如果差异的绝对值大于 2^63,它将包裹(或未定义),这是可以的。但是对于绝对差异小于 2^63 的情况,我希望结果是正确的。
以下三种方式:
c = a - b; // sign conversion warning ignored
c = sint64(a - b);
c = sint64(a) - sint64(b);
它们中的哪一个可以保证按标准工作?(以及为什么/如何?)