有符號整數的表示
每個有符號整數型別可以用三種格式中的任何一種表示; 它是實現定義的,使用哪個。用於任何給定有符號整數型別的實現至少與 int
一樣寬,可以在執行時從該型別中值 -1
的表示的兩個最低位來確定,如下所示:
enum { sign_magnitude = 1, ones_compl = 2, twos_compl = 3, };
#define SIGN_REP(T) ((T)-1 & (T)3)
switch (SIGN_REP(long)) {
case sign_magnitude: { /* do something */ break; }
case ones_compl: { /* do otherwise */ break; }
case twos_compl: { /* do yet else */ break; }
case 0: { _Static_assert(SIGN_REP(long), "bogus sign representation"); }
}
相同的模式適用於較窄型別的表示,但它們無法通過此技術進行測試,因為 &
的運算元在計算結果之前受到通常的算術轉換的影響。