V
Der Witz ist, daß Du gar nicht die Absicht hast, die natürlichen Zahlen als Zahlenraum zu haben, sondern nur den Restklassenring module 256.
Die R17 stellt eine ganze Klasse von Zahlen dar, und zwar die 17, die 17+256, die 17+2256, die 17-257 und so weiter, in der Tat unendlich viele.
Die R19 stellt entsprechend alle Zahlen der Form 19+z256 dar.
Rechet man irgend eine Zahl aus R17 plus irgendeine Zahl aus R19, so landet man sicher bei einer Zahl aus R36.
Rechnet man irghendeine Zahl aus R67 plus irgend eine Zahl aus R68, so landet man bei einer Zahl aus R135.
Das ist wiederum Blödsinn. Das richtige Ergebnis kriege ich nur mit 10000111. Warum darf ich jetzt plötzlich nicht mehr den Overflow streichen?
Den darfst Du streichen, wenn Du mit Restklassenringen rechnest und Dir dessen bewußt bist. Dann rechnest Du das, was der Computer auch rechnet, nämlich läßt Overflows fallen.
Nun ist das Ergebnis ja 10000111. Es ist ein Bit "zu groß". Als dachte ich mir: Mmh...ich darf das msb streichen, da es ja zu viel ist. Also würde die Zahl 0000111 herauskommen.
Doch nicht das MSB streichen. Das Streichen, was rausfällt, bei 8-Bit-Zahlen also das neunte Bit streichen.
Du willst gerade das MSB streichen, das wäre nicht ok.
Oder bist Du wieder in Zweierkomplementdarstellung, hast also auch negative Zahlen?
Dann nennen wir die Restklassen zum Teil um:
In R255 sind ja die Zahlen …-513,-257,-1,255,511…
Ob ich den jetzt R255 oder R511 oder R-1 nenne, ist recht egal.
R0 bleibt R0
R1 bleibt R1
usw
R127 bleibt R127
aber R255 wird zu R-1
und R254 wird zu R-2
usw.
Ich addiere zwei Zweierkomplementzahlen. Kann es sein, dass das Ergebnis nicht mehr im Zweierkomplement ist?? Dann würde es auch Sinn machen, warum die Zahl mit 1 beginnt und trotzdem positiv ist
Wenn Du die Zweierkomplementwelt verlassen würdest, also als Klassennamen R0 bis R255 nehmen würdest, hättest Du kein Problem, das MSB wäre halt gesetzt, woran Du erkennst, daß das Ergebnis über 127 ist. Es wäre kein Überlauf eingetreten.
Aber wenn Du die Zweierkomplementwelt nicht verläßt, hast Du ein Problem, nämlich daß Du genau schaun muß, was passiert ist. Es wäre sozudsagen ein "Überlauf" eingetreten, daß die Zahl ins Vorzeichenbit reingelaufen ist.
67 + 68 = 135
Und bei 135 ist das MSB gesetzt. Die Klasse, wo 135 drin vorkommt, ist die Klasse mit …-377,-121,135,391…
Du weißt nur, daß das Ergebnis in dieser Klasse ist, weißt aber nicht wirklich, welche Zahl davon es ist.
Und mit negativen Zahlen nehmen wir als Repräsentanten eben nicht die 135, sondern die -121.
Du weißt also nur, R67 + R68 = R-121, also das Ergebnis ist irgend ein -121+z*256. Das stimmt ja auch.
Es juckt uns nicht, daß da ein "Rechenfehler" war. So rechnet der Computer nunmal, wenn er auf 8-Bit-Zahlen beschränkt ist.
Profis schreiben nicht R67 + R68 = R-121, das habe ich nur mal zur Verdeutlicung gemacht.
Sie schreiben irgendwo "Ab jetzt alles mod 256" oder "Ab jetzt in Z/256" und ab dann ist mit 89 automatisch die ganze Klasse R89 gemeint.
Oder sie sagen es nichtmal dazu, sondern setzen es voraus, wenn es Computerzahlen sind.
Deswegen ist immer je nach Kontest 67 + 68 = 135 oder 67 + 68 = -121 und das andere falsch und zwei Sätze weiter ist es auf einmal doch richtig. Und dazu kommt noch, daß unklar ist, ob es jetzt gerade um R0 bis R255 oder um R-128 bis R127 geht. Das weiß ich wenigstens nie, wenn Du was vorrechnest.