有符號整數的表示

每個有符號整數型別可以用三種格式中的任何一種表示; 它是實現定義的,使用哪個。用於任何給定有符號整數型別的實現至少與 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"); }
}

相同的模式適用於較窄型別的表示,但它們無法通過此技術進行測試,因為 & 的運算元在計算結果之前受到通常的算術轉換的影響。