假設我有以下兩種類型:用簽名long long結果減去無符號長整數?
typedef unsigned long long uint64;
typedef signed long long sint64;
而且我有這些變量:
uint64 a = ...;
uint64 b = ...;
sint64 c;
我希望從減去B和結果分配給C,顯然,如果的絕對值差別大於2^63比它會包裹(或未定義),這是可以的。但對於絕對差值小於2^63的情況,我希望結果是正確的。
以下三種方式:
c = a - b; // sign conversion warning ignored
c = sint64(a - b);
c = sint64(a) - sint64(b);
哪他們都保證通過該標準的工作? (以及爲什麼/如何?)
又見此相關的問題:如何促銷規則時,在二元運算符兩邊的符號不一致工作?](http://stackoverflow.com/q/6770258/636019) – ildjarn