Wenn ihr keine sehr alte oder sehr neue Maschine habt, sollte etwas wie

4294967286 -10
246 246

herauskommen. Nur: Warum? Nun, rechnen wir zuerst die Zweierkomplementdarstellung von -10 aus: 10 = 000010102. Das Zweierkomplement davon ist 111101102 oder, als unsigned char interpretiert 0xF6 oder 246. Damit wissen wir schon, wie es zur zweiten Zeile kommt: Hier haben wir C gesagt, dass er unser Bitmuster als unsigned char interpretieren soll, und damit haben wir insbesondere die Sign Extension ausgeschaltet.

Die -10 in der ersten Zeile ist auch klar – hier standen auf beiden Seiten signeds, der C-Compiler hat per Sign Extension dafür gesorgt, dass alle hinzugefügten Bits 1 waren und so den Wert erhalten.

Bleibt die schrecklich große Zahl. Hier hat der Compiler beschlossen, dass er einen 32-bittigen Wert braucht (weil links was 32-bittiges steht, ints sind auf meiner Maschine so groß). Auf der rechten Seite steht aber eine vorzeichenbehaftete Zahl, die, wenn sie aufgeblasen wird, Sign Extension braucht. Das führt hier zur Zahl 1111 11111111111111111111111101102 oder 0xfffffff6. Im 32-bit-Zweierkomplement ist das, wie ihr schon am -10 in der ersten Zeile sehen könnt -10 – aber wir schieben dieses Bitmuster ja in eine vorzeichenlose Zahl und interpretieren es dann auch so. Die schrecklich große Zahl in der ersten Zeile ist also einfach 0xfffffff6 dezimal geschrieben (oder eben 232 - 10.