... oder kann man das irgendwie herleiten oder beweisen?
Ich würde es so anpacken:
- zunächstmal vorausschicken, dass es die 0 nur 1-mal gibt, also nicht zwischen -0 und +0 unterschieden wird,
- die Zahl +1 bilden, indem man zur 0 eine 1 hinzuaddiert, --> 00000000 00000001
- die Zahl -1 bilden, indem man von der 0 eine 1 subtrahiert, --> 11111111 11111111
- die beiden Zahlen vergleichen und feststellen, dass wir es hier nicht mit dem EinerKomplement zu tun haben, bei dem jede 0 durch eine 1 und jede 1 durch eine 0 ersetzt würde, sondern mit dem ZweierKomplement. Das ZweierKomplement ist dem EinerKomplement zwar sehr ähnlich, aber es liegt immer um 1 neben dem EinerKomplement. Diese Verschiebung kommt sozusagen daher, dass, wie oben bereits gesagt, es nur 1 Codierung für die 0 gibt und nicht zwischen -0 und +0 unterschieden wird. +0 ist 00000000 00000000 und für die -0 könnte man dann die 11111111 11111111 wählen. Diese Codierung entspricht aber der -1.
Dass wir für die 0 nur eine vorzeichenlose Codierung benutzen, das sorgt übrigens auch dafür, dass die ZahlenStrahlen der darstellbaren Zahlen, also die ZahlenBereiche "asymmetrisch" sind.
Z.B. bei 8 Bit -128..0..127, bei 16 Bit -32768..0..32767 u.s.w. ...
Im negativen Bereich gibt es immer eine Zahl (die kleinste darstellbare negative Zahl), die kein Pendant im positiven Bereich hat, jedenfalls nicht, wenn man nicht mindestens 1 Bit mehr spendiert, um die Zahl darzustellen.
Sooo, das VerUNDen einer Zahl mit ihrem EinerKomplement ergibt immer 0 ... das hilft uns also nicht weiter.
Zum Glück haben wir aber beim ZweierKomplement eine Differenz von 1 gegenüber dem EinerKomplement, so dass wir uns beim VerUNDen von Zahl und ZweierKomplement darauf verlassen können, dass beim niederwertigsten 1-Bit das eine 1-Bit genau an dieser Stelle durch das VerUNDen isoliert wird.
Betrachtet man dies zunächst für 1 und -1, dann für 2 und -2, dann sieht man schnell, dass bei 3 und -3 dasgleiche wieder gilt, u.s.w. ...
Edit:
Statt mit der Taste '+/-' das Vorzeichen umzuknipsen, kann man ersatzweise das ZweierKomplement aus einer logischen Verknüpfung und einer arithmetischen Operation zusammensetzen:
- entweder:
1. das EinerKomplement bilden (im Windows Rechner z.B. durch Anklicken von 'bitweise' und dann 'NOT') und
2. danach noch eine 1 addieren.
- oder:
1. eine 1 subtrahieren und danach noch
2. das EinerKomplement bilden (s.o.).