[?] int



  • Vor einiger Zeit hatte eine Skizze für einen Artikel über ints gemacht und die Einleitung ausgearbeitet. Ich hatte dann aber nicht weiter geschrieben. Glaubt ihr es wäre Wert ihn fertig zu schreiben?

    Ziel des Artikel ist auf den Unterschied int <-> natürliche Zahl hinzuweisen und dann ein wenig über die üblichsten Anwendungen der mathematischen Eigenschaften einzugehen.

    Es soll keine Einführung in Lösen von modulo Gleichungen sein auch wenn dieses Thema unweigerlich angeschnitten wird. Auf den Zusammenhang mit komplexe Zahlen weise ich höchstens in einem Schlusssatz hin. Ich will mich auch nicht in den Details verschiedener Prozessoren verlaufen. Overflow-Flag bleibt also raus.

    Zielleser sind Leute welche keine vertieften Kenntnisse im Bereich Mathematik haben (den anderen könnte ich eh glaub ich nichts erzählen was sie nicht bereits kennen 😉 ).

    Im Artikel würde ich keine 32Bit ints verwenden sondern mich auf 4 oder 5 Bit ints beschränken. Damit werden die Zahlen kleiner und leichter verdaulich.

    Bin über alle Kommentare dankbar.

    =====

    * Einleitung

    Jeder der schon mal programmiert hat wird sie kennen. Ein Program ohne sie ist kaum denkbar. Selbst aus dem Alltag von blutigen Anfängern kann man sie nicht wegdenken. Die meisten machen sich nur wenig Gedanken über sie da sie so herrlich einfach erscheinen. Schließlich kennen wir sie schon aus der Grundschule. Die Rede ist natürlich von Zahlen.

    Damit meine ich jetzt nicht Monster wie Imaginäre Zahlen sonder die unschuldigen Zahlen die viele hier als int bezeichnen. Erstere erscheinen weit weg und weltfremd, letzteren jedoch begegnet man an unzähligen stellen im Alltag, sei es bei der Wahl einer Telefonnummer oder bei einer digitalen Uhr.

    Sie geben sich so herrlich unschuldig. Legt man 1 Stein zu einem weiteren so hat man 2. Jetzt noch einen und man hat schon 3 auf einem Haufen. Wer allerdings so über die Zahlen in seinem Rechner denkt der wird wahrscheinlich auch der Meinung sein, dass x in folgendem Beispiel nur 3 sein kann.

    x * 4 = 12

    Es gibt neben der 3 aber noch 3 weitere mögliche Werte für x. Ähnlich kann man auch nicht sicher sagen, dass x in folgendem Beispiel 1 ist.

    x * 16 = 16

    Hinter int verbergen sich nämlich nicht die Zahlen wie man sie aus der Grundschule kennt und deshalb dürft die Antwort für manche Leser auch überraschend sein.

    Wer jetzt des Rätzels Lösung wissen will der soll diesen Artikel zu Ende lesen. Wen das Thema eher langweilt der sollte an dieser Stelle aufhören, da für beinahe alle praktischen Anwendungen das Wissen um int nicht von Nöten ist.

    * Wiederholung aus der Grundschule : Der Zahlenstrahl

    * Overflow und Underflow

    Verbindung mit dem Modulo, nicht tief gehend

    * Der Kreis des ints

    Der Zahlenstrahl als Kreis wie man es bei Winkeln kennt. (360° = 0°, +2*k*pi etc)

    * Vorzeichen nur eine Frage des Standpunktes

    Zweierkomplement = Unterschied [0, 2*pi[ <-> ]-pi, pi]
    Wieso macht der Prozessor keinen Unterschied zwischen signed und unsigned bei der Addition?

    * Die Lösung

    Würde mich ehrlich gesagt interessieren wie viele von euch die Lösung des Anfangsproblem kennen.



  • Das klingt interessant. 👍
    ...außerdem möchte ich nun gerne wissen, wieso x im zweiten Beispiel nicht 1 sein muss. 😕 😃



  • Weil die Aussage unklar aufgeschrieben ist. Leider ist es als mathematische Formel aufgeschrieben, aber in der Programmiersprache gemeint (und dort ist es ein Syntaxfehler, zumindest in C++). Gemeint war wohl sowas wie

    if(x*4 == 12) cout << "Jetzt ist x sicher 3";

    Durch Überläufe kann man aber evtl auch für andere Zahlen da reinkommen...

    Mich haut's thematisch jetzt nicht vom Hocker, aber ich bin ja auch explizit nicht in der Zielgruppe. 😉
    Ich könnte mir schon vorstellen, dass es ganz interessant ist für den Anfang. 🙂

    Kleiner Tipp am Rande:

    Es gibt neben der 3 aber noch 3 weitere mögliche Werte für x.

    Anzahlen (aber nicht Zahlen) bis zwölf werden ausgeschrieben:
    "Es gibt neben der 3 aber noch drei weitere mögliche Werte für x."

    Die erste 3 bezeichnet eine Zahl, bleibt also, die zweite eine Anzahl (nämlich von Werten) und wird daher ausgeschrieben.



  • Jester schrieb:

    Weil die Aussage unklar aufgeschrieben ist. Leider ist es als mathematische Formel aufgeschrieben, aber in der Programmiersprache gemeint.

    Wieso ist das denn mathematisch gesehen falsch? Ich hab nie behauptet, dass x, 4 und 12 natürliche Zahlen sind. Wenn sie sich wie ints verhalten dann sind sie es ja nicht und darum geht es ja gerade. Gut ich hätte es natürlich auch als
    x * 4 ≡ 12 (mod 16)
    hinschreiben können und dann wäre alles in Z. Dies ist sicher verbreiteter da es den Unterschied klar macht, aber dann ist der ganze Witz des Artikels ja weg und die Zielgruppe weiß immer noch nicht worum es geht.

    Jester schrieb:

    Durch Überläufe kann man aber evtl auch für andere Zahlen da reinkommen...

    Nicht bloß eventuell, ganz sicher sogar.

    estartu schrieb:

    ..außerdem möchte ich nun gerne wissen, wieso x im zweiten Beispiel nicht 1 sein muss.

    Die Antwort hängt von der Anzahl der Bits ab. Wenn man zum Beispiel 4 Bits hat dann ist 16 ≡ 0 (mod 16) und somit steht da eigentlich:
    0*x = 0
    Was da x ist sollte klar sein. 😉

    Bei 5 Bits kann man für x sämtliche ungeraden Zahlen einsetzen. Für höhere Bitzahlen sind die möglichen Antworten verschieden, es sind aber immer 16 mögliche Antworten.

    Das Problem ist verwand mit dem Suchen aller x, so dass x^n = c mit x und c in C und n in N.



  • Ben04 schrieb:

    estartu schrieb:

    ..außerdem möchte ich nun gerne wissen, wieso x im zweiten Beispiel nicht 1 sein muss.

    Die Antwort hängt von der Anzahl der Bits ab. Wenn man zum Beispiel 4 Bits hat dann ist 16 ≡ 0 (mod 16) und somit steht da eigentlich:
    0*x = 0
    Was da x ist sollte klar sein. 😉

    Ih wie fies... 😃


Anmelden zum Antworten