Overflow bei Variablen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Das heutige Thema lautet
    Overflow


    Das Wort scheint zuerst ziemlich unbekannt für Einige bzw. die Meisten hier zu sein.
    Beginnen wir zuerst, das Wort ins Deutsche zu übersetzen.
    Und was kommt nun bei der Google Übersetzung heraus?


    Überlauf


    Nun. Noch können Einige nichts damit anfangen. Hier mal ein kleines Beispiel:
    Du hast ein leeres Fass bzw eine Variable mit dem Inhalt 0.
    Du füllst das Fass mit Wasser bzw eine Variable mit Zahlen.
    Irgendwann hat das Fass jedoch genug Wasser und beginnt zu überlaufen bzw.
    die Variable geht über die maximalen Kapazitäten über und die Werte
    beginnen an zu spinnnen und stimmen nicht mehr überein.
    Nun, das wäre eigentlich schon die Erklärung.


    Welche Kapazitäten haben nun Integer bzw. normale "new" Variablen in Pawn?
    Von −2.147.483.648 bis 2.147.483.647.
    Wenn ihr nun hergeht und sagt, dass der neue Wert eurer Variable über dieser
    Grenze liegt (vielleicht ein Geldwert), dann beginnt der Wert an zu spinnen und
    zeigt vielleicht ein negativen Wert an.


    Warum haben Variablen Kapazitäten?
    In der Programmierung (C++/C/C#/...) gibt es verschiedene Datentypen mit
    unterschiedlichen Bytes-Größen. Sie dienen dazu, um nicht immer bei Speicherung
    von Zahlen Millionen von möglichen Werten zu erlauben, da dies ein Haufen von
    Bytes im Arbeitsspeicher verbraucht. Es wurden bestimmte Größen festgelegt und
    bei Integer hat man sich auf 4 Bytes (32 Bit = 4 Bytes = 4 * 8 Bit (1 Byte = 8 Bit)) geeinigt. Ein Integer
    ist gleichzusetzen mit dem "new", wie Ihr es in Pawn kennt.


    Könnte man da etwas machen?
    Ja, denn zum Beispiel bei Geld haben bereits die meisten Server eine serverseitige
    Verwaltung davon. In den Funktionen müsste nur eine if-Abfrage geschehen und
    die sollte auf eine parallele Variable bzw PVar zurückgreifen. Wenn wieder Geld
    abgezogen wird, dann zuerst überprüfen, ob Reste auf der PVar bzw. der parallelen
    Variable liegt und dann erst von der richtigen Geldquelle abziehen.


    Hier noch ein kleines Bild dazu, wie es bei Arrays aussieht (Quelle:(


    Nun das wars.
    Jetzt kennt ihr Overflow und seid glücklich, sofern ihr den ganzen Text gelesen habt und
    nicht nur 50% oder weniger wie bei meinem "Format" Tutorial.


    Freundliche Grüße
    - Necktrox

    3 Mal editiert, zuletzt von d30af26d ()

  • Hi


    Es wäre vielleicht noch interessant zu schreiben, wie sich ein Overflow bitmässig verhält, sprich aus grossen Zahlen schnell tiefe Zahlenw erden können (Bitverschiebung nach rechts), also eine Erklärung warum das so ist. Ansonsten wirkt das ganze einfach hingeschrieben, als hätte man was schreiben müssen, nicht wirklich informativ - sorry.


    Gruss.

  • Ein Beispiel mit Bits würde viel zu weit in die Computergeschehenisse eingehen und nur verwirrend für die Mitglieder hier sein.
    Ich müsste dann noch Dualzahlen erklären usw.

  • Ja ok, was das tutorial erklärt, erklärt es gut, aber rfü meinen geschmack etwas zu wenig erklärt, zB warum hat die variable genau den Grenzwert, was passiert mit den Bits die "aus dem Fass fallen" etc.

  • Es sollte nur erklären, was ein Overflow ist und nicht die Dualzahlen. Außerdem würde es würde das Niveau übersteigen.
    Vielleicht werde ich noch ein Dualzahlen Tutorial machen.


    // > Warum gibt es Kapazitäten < hinzugefügt, da ihr es ja so wolltet.

  • Gutes Turoial ;)


    Ich fands jetzt nicht schwer zu verstehen :D


    Und zu den Dualzahlen, das ist nun wirklich nicht so schwer zu verstehen ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ein sehr gutes und verständliches Tutorial.


    Was mich allerdings stört ist folgender Satz:

    Jetzt kennt ihr Overflow und seid glücklich, sofern ihr den ganzen Text gelesen habt und
    nicht nur 50% oder weniger wie bei meinem "Format" Tutorial.


    Warum muss man so einen Satz schreiben?
    Du kommst rüber wie ein eingibildeter Arroganter Scripter, der darunter leidet,
    dass die Leute die das lesen zu dumm sind irgendwas zu kapieren.


    Bitte, tu mir einen Gefallen, änder das.
    Das ist unter aller Sau.

  • bei Integer hat man sich auf 4 Bytes (32 Bit = 4 Bytes * 8 Bit) geeinigt

    Typo oder breiig im Kopf? 32 Bit != 4 Byte * 8 bit, sondern 32 Bit = 4 Byte, weil 1 Byte = 8 Bit ist. Wollte nur daraufhinweisen, dass der Text in Klammern ein wenig vermurkst ist :p


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • 32 Bit = 4 Bytes * 8 Bit
    Das könntest du ein bisschen besser erklären, so wie du es darstellst klingt es, als ob man 4 Bytes mal 8 Bit nimmt, was allerdings falsch ist. Vielleicht
    32 Bit = 4 Bytes á 8 Bit o.Ä.

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger