[A] Zahlensysteme, Teil 2 - Darstellung und Operationen



  • Zahlensysteme, Teil 2 - Darstellung und Operationen

    Inhalt

    • 1. Speicherrepräsentation

    • 1.1 Vom Bit zum Quadword

    • 1.2 Endianness

    • 1.3 Vorzeichen und Zweierkomplement

    • 1.4 Dualkodierte Dezimalziffern und Bitfelder

    • 1.5 Gleitkommazahlen

    • (1.6 Komplexe Zahlen)

    • 2. Binäre Operationen

    • 2.1 Logische Verknüpfungen

    • 2.2 Schiebeoperationen

    • 3. Zeichendarstellung

    • 3.1 Datentypen

    • 3.2 Speicherrepräsentation

    • 3.3 Konvertierungsmöglichkeiten

    • 4. Schlusswort

    1 Speicherrepräsentation

    Im ersten Teil dieses Artikels habe ich beschrieben, wie Zahlen dargestellt werden können ohne dabei Änderungen an ihren Wertigkeiten vorzunehmen, und wie man Zahlenwerte von einem System in das andere konvertieren kann. In diesem Teil möchte ich beschreiben warum die Anwendung von unterschiedlichen Zahlensystemen auf dem Computer so wichtig ist, wie Daten eigentlich verwaltet und gepeichert werden, und wie man mit diesen Daten arbeiten kann.

    1.1 Vom Bit zum Quadword

    Was passiert nun also, wenn man Speicher reserviert und in diesem eine Zahl hinterlegt? Ich werde hier der Einfachheit halber den Begriff "Speicherzelle" benutzen, um die kleinstmögliche Speichereinheit zu beschreiben. Wie ich im ersten Teil schon beschrieben habe, ist es für Prozessoren und Mikrocontroller sehr einfach Daten in binärer Form zu speichern und zu lesen, ist es doch besonders effizient zu überprüfen ob an einem Transistor Spannung anliegt oder nicht. Die theoretisch kleinstmögliche Speicherform ist also ein Zelle, welche eben zwei binäre Werte beinhalten kann - 0 und 1. Praktisch gesehen ist dies allerdings sehr ineffizient. Um mit Speicher arbeiten zu können, egal in welcher Form, ist es notwendig solche Zellen zu adressieren. Dies kann man tatsächlich mit der uns bekannten Heimanschrift vergleichen. In der Regel besteht diese aus Postleitzahl, Straße, Hausnummer und unserem Namen. Die Etage in der wir wohnen, die eigentliche Tür, oder gar der Raum ist uninteressant, da wir einen Briefkasten am Hauseingang hängen haben um der armen Postfrau unter die Arme zu greifen.

    Ähnlich ist es bei der Verwaltung von elektronischem Speicher. Würden wir Daten in Zellen verwalten, die nur zwei Werte annehmen können, so würden Speicheradressen unheimlich lang und unhandlich werden. Seit mehr als 40 Jahren benutzt man deshalb eine größere Anzahl von solchen Zellen als kleinstmögliche adressierbare Speichereinheit, das Byte, vergleichbar mit eben unserem Haus in dem wir wohnen. Eine Zelle, die die Werte 0 und 1 speichern kann, hat eine Speicherkapazität von einem Bit. In einem Bit kann man also nur zwei Dezimalwerte speichern, eben 0 und 1. Acht solcher Bits zu einer Einheit zusammengefasst bezeichnet man als Byte und stellt eben auf den meisten heutigen Architekturen die kleinste adressierbare Speichereinheit dar. Bit und Byte werden häufig dazu benutzt, um zwei verschiedene Sachen zu beschreiben. Einmal eben die Speicherzelle selbst, die entweder ein oder acht Bits breit ist, desweiteren werden sie als Einheit zum Beschreiben der Speicherkapazität solcher Speicherzellen eingesetzt.

    [pic]

    Dies ist der Punkt, an dem wir sehen können, dass das Binärsystem geradezu prädestiniert für die Datenrepräsentation heutiger Prozessoren ist. Wir wissen nun, dass die kleinste adressierbare Speichereinheit das Byte ist, welches aus 8 Bits besteht. Was können wir nun darin speichern? Zahlen natürlich, nichts als binäre Zahlen. Ziemlich unspektakulär, aber dennoch effizient und mächtig. In einer 8 Bit breiten Speicherzelle können wir also Zahlen im Bereich von

    00000000b - 11111111b
    

    speichern. Eine schnelle Umrechnung in das Dezimalsystem, wie im ersten Teil des Artikels beschrieben, zeigt, dass wir dezimale Ganzzahlen

    0 - 255
    

    in einem Byte speichern können, hexadezimal nichts anderes als

    0x00 - 0xFF
    

    Da, wie schon erwähnt, Daten häufig in ihrer Hexadezimalform beschrieben und benutzt werden, ist sie doch so kompakt und leicht lesbar, liegt ein Faktum sehr nahe. Wir können Zahlen von 0x00 bis 0xFF in einem Byte speichern. Die Natur von Hexadezimalzahlen ist es aber eben 4 Bit mit einer Ziffer darstellen zu können. Um eben die Hälfte eines Bytes, 4 Bit breit, beschreiben zu können, hat man den Begriff "Nibble" eingeführt. Ein Nibble ist selbst keine adressierbare Speichereinheit, kann aber ein Byte charakterisieren und wird bei dualkodierten Dezimalziffern benötigt. Ich werde in Abschnitt 1.4 näher darauf eingehen.

    Ein Byte besteht also aus 2 Nibbles, klingt lustig, ist aber so. Bit 0 bis Bit 3 werden dabei als Low-Order Nibble bezeichnet. Bit 4 bis Bit 7 als High-Order Nibble. Bit 0 und Bit 7 in einem Byte selbst tragen ebenfalls spezielle Bezeichnungen. Bit 0 wird dabei als Least Significant Bit, oder Low Order Bit eines Bytes bezeichnet, Bit 7 respektive als Most Significant Bit oder High Order Bit.

    [pic]

    Ein Nibble kann Hexadezimalzahlen von

    0x0 - 0xF
    

    speichern, also dezimal

    0 - 15
    

    Die Zeiten als Prozessoren noch auf 8 Bit breiten Daten operierten sind zwar noch nicht vorbei, so haben die gängisten Mikrocontroller immer noch eine 8 Bit Architektur, so ist es bei heutigen Anwendungsfällen notwendig, dass Prozessoren in der Lage sind Daten größerer Länge mit einem Befehl verarbeiten zu können.

    Die nächstgrößere Speichereinheit bezeichnet man als Word und ist 16 Bit, also zwei Byte breit. Auch hier unterscheidet man wieder in Low Order Byte und High Order Byte. Warum dies so wichtig ist, werde ich im Abschnitt 1.2 beschreiben, denn nicht jede Architektur speichert Daten in der selben Reihenfolge.

    [pic]

    Das Word kann Ganzzahlen, dezimal ausgedrückt, von

    0 - 65535
    

    bzw. hexadezimal von

    0x0000 - 0xFFFF
    

    speichern.

    Nach dem Word wurde man Einfallslos und bezeichnete die nachfolgende Speichereinheit schlicht als Doubleword. Ein Doubleword ist 32 Bit breit, besteht also aus zwei Words, bzw. vier Bytes. Das Doubleword wird dementsprechend in ein Low Order Word und ein High Order Word unterteilt.

    [pic]

    Ein Doubleword ist in der Lage den dezimalen Ganzzahlbereich von

    0 - 4294967295
    

    darzustellen, welches natürlich hexadezimal mit

    0x00000000 - 0xFFFFFFFF
    

    gleichzusetzen ist.

    Und hier hörte es auch schon auf. Eine größere Speichereinheit war nicht notwendig, wenn man in Assembler programmierte, da doch alle bis dato verfügbaren Prozessoren intern mit maximal 32 Bit breiten Daten operierten (von speziellen Instruktionen, wie z.B. dem MMX Befehlssatz, einmal abgesehen). Dies änderte sich mit der Einführung der 64 Bit Erweiterung durch AMD. Eine neue Ganzahlspeichereinheit musste her. Das Quadword war geboren. Wie der Name schon sagt, besteht ein Quadword aus 4 Words, bzw. zwei Doublewords, also 8 Bytes. Welches uns unmittelbar zur eigentlichen Breite des Quadwords führt, den 64 Bits. Ein Quadword lässt sich ebenfalls naturgemäß in ein Low Order Doubleword und ein High Order Doubleword unterteilen.

    [pic]

    Mit dem Quadword sind wir nunmehr in der Lage Ganzzahlen von

    0 - 18446744073709551615
    

    zu speichern. Hexadezimal bedeutet dies wie gewohnt

    0x0000000000000000 - 0xFFFFFFFFFFFFFFFF
    

    1.2 Endianess

    In der westlichen Welt ist es üblich von links nach rechts zu lesen. In der deutschen Sprache gibt es da eine Ausnahme. Wenn wir Zahlen lesen, so nennen wir in einigen Fällen die Zahl mit dem kleineren Wert als erstes. So nennen wir die Dezimalzahl

    43
    

    eben drei-und-vierzig, nicht vierzig-und-drei, im Gegensatz zum Englischen, in dem es als fourty-three ausgesprochen wird. Die Eigenart, in welcher Richtung Daten gelesen werden, wird als Endianess bezeichnet. Die Richtung, in der der kleinere (also der least significant) Wert zuerst gelesen wird, bezeichnet man als Little Endian Order. Dies ist mit dem Lesen von rechts nach links zu vergleichen. Wenn der höhere (also der most significant) Wert zuerst gelesen wird, so spricht man von der Big Endian Order, also einem Lesen von links nach rechts. Intel i368 kompatible Architekturen, dazu gehört auch die x86_64 Architektur von AMD, speichern Daten in der Little Endian Order. Architekturen wie der PowerPC von IBM dagegen arbeiten im Big Endian Mode. Wenn man zum Beispiel die 16 Bit breite Zahl

    0xA4D3 = 42195
    

    in einem Word im Arbeitspeicher gepeichert hat, so speichert ein i386 kompatibler Prozessor die Daten in folgender Reihenfolge ab (dies geschieht natürlich wie schon erwähnt in der kleinsten adressierbaren Speichereinheit, also benötigen wir zwei Bytes):

    0xD3 0xA4
    

    ein PowerPC würde sie allerdings so abspeichern, wie wir es gewohnt sind Hexadezimalzahlen zu lesen, eben von links nach rechts:

    0xA4 0xD3
    

    Die Gründe für die unterschiedliche Endianess sind vielfältig. Beide haben Ihre Vor- und Nachteile, dies soll aber hier nicht zum Gegenstand einer tiefgreiferenden Beurteilung sein. Der Hauptvorteil des Little Endian Mode ist, dass das kleinste Byte an der kleinsten Speicheradresse gepeichert wird, also aus rein technischer Sicht effektiv sein kann. Die macht es allerdings für den Programmierer schwieriger Daten zu lesen. Der größte Vorteil des Big Endian Mode ist, dass sich effizient prüfen lässt, welches Vorzeichen die gespeicherte Zahl besitzt (näheres dazu im Abschnitt 1.3). Im Grunde ist es auf den ersten Blick auch nicht wichtig, in welcher Reihenfolge der Prozessor Daten speichert, solange Berechnungen mit Ihnen immer das gleiche, und vor allem richtige Ergebnis erzeugen. Wichtig wird dieser Umstand erst, wenn Daten mit anderen Rechnern ausgetauscht werden. Dies kann so simpel wie eine einfache Audio-CD sein, oder sogar noch mehr in den Vordergrund rücken wenn Daten über ein Netzwerk ausgetauscht werden müssen. Heute ist es üblich die sogenannte Network Byte Order zu verwenden, wenn Daten über ein Netzwerk übertragen werden. Da dies im Internet am häufigsten der Big Endian Order entspricht, liegt also bei i368 kompatiblen Architekturen ein kleiner Rechenmehraufwand vor. Ein i386 kompatibler Server muß in diesem Falle die Daten erst umsortieren. Ein i386 kompatibler Client muss sie ebenfalls wieder in die Little Endian Order bringen.

    1.3 Vorzeichen und Zweierkomplement

    Die Welt könnte so schön sein. Uns stehen inzwischen 64 Bit breite Register zur Verfügung und können in Bruchteilen von Sekunden Berechnungen an unaussprechlichen natürlichen Zahlen durchführen. Aber die Menschheit wollte es ja wissen, und führte negative Zahlen ein. Im Abschnitt 1.1 ist Ihnen mit Sicherheit aufgefallen, dass aus irgend einem Grunde nur positive Ganzzahlen gepeichert werden. Das ist so auch korrekt. Im Alltag benutzen wir Vorzeichen wie "+" (welches in der Regel entfällt) und "-" um zwischen positiven und negativen Zahlen zu unterscheiden. Jetzt haben wir ein gewaltiges Problem. Wie wir ja wissen, speichert unser Computer Daten als Bitfolge. Um dieser Bitfolge einen "greifbaren" Wert zuordnen zu können, nutzen wir ihre Darstellung im Binärsystem. Nichts neues soweit. Was hält uns eigentlich davon ab, die Dezimalzahl -13 als

    -1101b
    

    darzustellen? Überhaupt nichts. Genau genommen wäre dies sogar der mathematisch einheitliche Weg. Nun mag sich der aufgeweckte Leser fragen, welches Problem wir damit eigentlich haben. Es ist offensichtlich. Elektronische Speicher könnten zwar so konstruiert werden, dass sie drei anstatt zwei unterschiedliche Werte halten können, so würde es ungemein technisch komplizierter werden einen Prozessor zu entwerfen, der auf einmal mit drei unterschiedlichen Werten operieren müsste. Wir haben also die rein technische Einschränkung, dass wir kein Vorzeichen als separates Datum speichern können. Dieser Umstand wird uns nochmals begegnen, wenn wir uns im Abschnitt 3 an der Zeichendarstellung versuchen.

    Wie können wir nun negative Ganzzahlen speichern, damit der Prozessor auch erkennt dass sie negativ sind, und somit Berechnungen mit ihnen das korrekte arithmetische Ergebnis liefern? Vorzeichen stehen uns nicht zur Verfügung, demnach bleibt nichts anderes als die Wertigkeit der Zahl zu benutzen, um auszudrücken ob sie positiv oder negativ ist. Sehen wir uns nochmals den möglichen Wertebereich eines Bytes, also eines 8 Bit breiten Speicherbereichs an:

    00000000b - 11111111b, 0 - 255, 0x00 - 0xFF
    

    Der Gerechtigkeit halber teilen wir diesen Wertebereich in zwei gleiche Hälften, um einer Hälfte Negativwerte zuweisen zu können. Natürlich hat dies nicht nur etwas mit Gerechtigkeit zu tun. Welchen mathematischen Zweck dies hat, wird gleich ersichtlich. Wir legen für ein Byte breite Zahlen also fest:

    -128 - 127 (also ebenfalls 256 verschiedene Werte)
    

    Ok, das war leicht, nicht? Null betrachten wir als positive Zahl und so ist der Gerechtigkeit genüge getan. Aber Moment, die Zahl wird im elektronischen Speicher binär dargestellt, wie sieht also die binäre Darstellung von zum Beispiel -18 aus? Betrachten wir, welche positiven Ganzzahlen wir für die Negativdarstellung geopfert haben:

    128     10000000b (entspricht -128)
    bis
    255     11111111b (entspricht -1)
    

    Oh, fällt Ihnen etwas auf? Wenn nicht, sehen Sie sich nochmals den unteren Teil des Wertebereichs genauer an:

    0       00000000b
    bis
    127     01111111b
    

    Erstaunlich, das achte Bit, also das Most Significant Bit ist in der oberen Hälfte des Wertebereichs, also jener, die wir für Negativzahlen benutzen wollen immer eine 1. Nutzen wir doch diesen Umstand. Wir definieren, dass das Most Significant Bit, also das höchstwertigste, das Vorzeichen für eine vorzeichenbehaftete Zahl darstellen soll. Eine führende 0 kennzeichnet, dass nachfolgende Bitfolge als positiv zu betrachten ist, eine führende 1 entsprechend als negativ. Da gilt natürlich für jede erdenkliche Speicherbreite, nicht nur für das hier vorgestellte Byte. Bei einem Word würde sich der Wertebereich dann wie folgt zusammensetzen:

    0       0000000000000000b
    bis
    32767   0111111111111111b
    
    32768   1000000000000000b (entspricht -32768)
    bis
    65535   1111111111111111b (entspricht -1)
    

    So weit, so gut. Wir haben jetzt also einen Indikator dafür, ob eine Zahl negativ oder positiv ist. Die obere Hälfte des Wertebereichs soll also unser Negativbereich darstellen. Aber die Wertigkeiten sind irgendwie noch unsinnig. Warum weist man der höchstmögliche Zahl den Wert -1 zu? Dies leuchtet schnell ein. Aus arithmetischen Gründen müssen wir negative Zahlen natürlich auch aufsteigend ihrer Wertigkeit nach anordnen. Ein höherer binärer Wert muss natürlich einen der Null näheren Wert entsprechen, ansonsten würden sämtliche Operationen mit ihnen mathematischen Unsinn ergeben.

    Wie sieht es denn mit dem Vorzeichenwechsel selbst aus? Reicht es denn nicht, einfach das höchstwertige Bit umzuschalten? Sehen wir uns folgendes Beispiel an:

    00000111b = 7
    

    Der Prozessor erkennt eine Null an höchstwertigster Stelle und interpretiert die Zahl korrekt als Dezimalzahl 7. Wir lassen sieben Bits unverändert, und stellen ihnen eine 1 voran, um zu signalisieren, dass wir eine Negativzahl einleiten:

    10000111b
    

    Lassen Sie uns eine Vermutung anstellen. Der Prozessor erkennt eine 1 im achten Bit, und versucht den Wert als negative Zahl zu interpretieren. Jetzt mag der gesunde Menschenverstand erkennen, klar, ganz einfach. Der Prozessor muss jetzt diese "7" bei nachfolgenden Berechnungen eben nur als negativ betrachten. Leider ist dies mathematisch nicht so einfach. Addieren wir zu dieser vermeintlich negativen "7" zum Beispiel dezimal 10:

    10000111b ("negativ" 7)
             + 10001010b (10)
    Übertrag       111 
    --------------------
               10010001b = 145
    

    145? Jetzt sind wir in dem Bereich, in dem unser Prozessor Werte als negativ interpretieren würde. Dies erkennen wir auch an der führenden 1 im Ergebnis. "3", das eigentlich schlüssige Ergebnis, ist allerdings alles andere als negativ. Die Annahme, dass 10000111b also negativ 7 darstellt liegt zwar nahe, hat aber mathematischen Unsinn zum Resultat. Wie können wir also eine positive Zahl so umwandeln, so dass wir ihre negative Entsprechung erhalten?

    Der Grundgedanke ist denkbar einfach. Wie wir bereits wissen, soll die höchstmögliche positive Zahl -1 darstellen. Die Zahl davor -2, und so weiter. Sehen wir uns dieses in einer Übersicht (am Beispiel der Speicherbreite eines Bytes) an:

    Dezimal       Binär       dezimale Negativentsprechung       binäre Negativentsprechung       
    
    0             00000000b   0                                  00000000b (dezimal: 0)
    1             00000001b  -1                                  11111111b (dezimal: 255)
    2             00000010b  -2                                  11111110b (dezimal: 254)
    3             00000011b  -3                                  11111101b (dezimal: 253)
    

    Wie wandeln wir jetzt also eine 3 (binär 00000011b) nach -3 (binär 11111101b) um? Da bei einem Byte Speicherbreite die Dezimalzahl 253 unsere -3 repräsentieren soll, lässt sich erkennen, dass rein formal eine Umwandlung wie folgt stattfinden muss:

    [i]neg[/i] = 2[i][h]Speicherbreite[/h][/i]-[i]pos[/i]
    

    Am Beispiel gezeigt also:

    2[h]8[/h]-3 = 253
    

    Diese 253 lässt sich mit Hilfe des im 1. Teil des Artikel vorgestellten Algorithmus dann in ihre Binärdarstellung bringen und würde 11111101b zum Resultat haben, die gewollte -3. Eine Umwandlung in das Dezimalsystem, die Potenzberechnung und eine anschließende Rückkonvertierung erscheint aber extrem ineffizient. Im Binärsystem lässt sich dies natürlich auch bewerkstelligen, aus technischer Sicht sogar wesentlich effizienter. Alles was wir tun müssen, ist die positive Zahl zu invertieren, auch negieren genannt. Näheres dazu finden Sie im Abschitt 2. Für jetzt soll es genügen, zu wissen, dass beim Negieren ein Binärwert einfach gegen sein Komplement ausgetauscht wird. Also für eine 1 setzen wir eine 0 und für eine 0 eine 1. Nach dem Invertieren addieren wir zum Resultat 1 und erhalten somit die Negativdarstellung des ursprünglichen Wertes. Betrachten wir uns diesen Vorgang am Beispiel der positiven Ganzzahl 3:

    00000011b (dezimal 3)
        11111100b (invertieren)
    +   00000001b (1 addieren)
    -------------
        11111101b = 253 (also -3)
    

    Im Umkehrschluss erfolgt die Umwandlung von der Negativdartellung in ihre Positivdarstellung genau so:

    11111101b (dezimal 253, also -3)
        00000010b (invertieren)
    +   00000001b (1 addieren)
    -------------
        00000011b = 3
    

    Kool, nicht? Überprüfen wir die graue Theorie, widmen uns unserem alten Beispiel und wollen -7 mit 10 addieren. Zuerst bestimmen wir die Negativentsprechung von dezimal 7:

    not 00000111b
    =   11111000b
    +   00000001b
    -------------
        11111001b
    

    Jetzt addieren wir zu 11111001b (-7) 00001010b (10):

    11111001b
             + 00001010b
    Übertrag  11111  
    --------------------
              100000011b = 259
    

    259? Seltsam. Aber das ist eigentlich der technische Trick. 11111001b, also -7 würde nicht vorzeichenbehaftet 249 entsprechen. In Wirklichkeit rechnet der Prozessor ja auch 249+10, erhält also 259. Da ein Byte aber eben nur 8 Bit breit ist, speichert der Prozessor natürlich nur die ersten 8 Bits. In unserem Falle wären dies:

    00000011b
    

    also dezimal 3, welches dem tatsächlich zu erwartendem Ergebnis entspricht. Das übrige Bit wird als Übertragsbit, oder auch Carry-Bit bezeichnet. Es wird vom Prozessor im Regelfall verworfen. Es ist aber auch möglich dem Prozessor zu signalisieren dieses Bit zu speichern, um es bei nachfolgenden Berechnungen weiterzuverwenden. In diesem Falle wird das sogenannte Carry-Flag im Statusregister des Prozessors gesetzt. Näheres dazu im Abschnitt 2.

    Die hier behandelte Form der Negativdarstellung nennt man auch Zweierkomplement und ist die heute am häufigst benutzteste. Es existiert auch noch die Möglichkeit Negativzahlen mit Hilfe des Einerkomplements darzustellen. Dies ist so ziemlich genau das selbe, nur wird beim Umwandeln auf die Addition mit 1 verzichtet. Es wird nur das Komplement, also die Inverse der Binärzahl gebildet. Daher rührt auch der Name. Das Rechen mit Einerkomplement Negativzahlen ist technisch aber sehr schwer umsetzbar. Desweiteren existieren in diesem System zwei Nullen (00000000b und 11111111b). Dieser Umstand wird beim Zweierkomplement durch die Addition mit der 1 vermieden. Der Wertebereich ist beim Einerkomplement durch die Existenz von zwei Nullen demnach um 1 kleiner als beim Zweierkomplement.

    Im Abschnitt 1.2 habe ich darauf hingewiesen, dass sich das Vorzeichen einer Zahl, die im Big Endian Format gespeichert ist effizienter auslesen lässt. Jetzt sollte auch ersichtlich sein, wieso dies der Fall ist. Da im Big Endian Format das höchstwertige Bit an der niedrigsten Speicheradresse gespeichert ist, lässt sich das Vorzeichen ohne Kenntnis der Breite der Zahl sofort bestimmen. Im Little Endian Format muss die Breite bekannt sein und dann zur kleinsten Speicheradresse hinzuaddiert werden, um das Most Significant Bit lesen zu können.

    [pic]

    Nun mag sich der aufmerksame Leser gefragt haben, wie sich Vorzeichen im Hexadezimalsystem verhalten. Nicht anders. Wie üblich wird die binäre Negativdarstellung in ihre Hexadezimalform gebracht. Somit ist die Zahl -3 also:

    11111101b = 0xFD
    

    Im Grunde genommen rechnet der Prozessor in der Tat nur mit positiven Zahlen. Der Umstand der begrenzten fixen Speicherbreiten seiner Register kann aber dafür genutzt werden, mathematisch korrekte Resultate zu liefern.



  • ok, heute will ich mich mal hier ransetzen, damit beide teile möglichst
    zeitgleich veröffentlicht werden können. ist es möglich ein archiv mit quellcode,
    ähnlich wie bilder, hochzuladen, um dann vom artikeltext darauf zu
    verlinken?



  • http://www.c-plusplus.net/forum/viewforum-var-f-is-53.html

    Da gibt's die Verbindungsdaten für das ftp. Es war zwar ursprünglich für Bilder gedachtet aber wird nun auch für andere Daten genutzt.



  • Ben04 schrieb:

    http://www.c-plusplus.net/forum/viewforum-var-f-is-53.html

    Da gibt's die Verbindungsdaten für das ftp. Es war zwar ursprünglich für Bilder gedachtet aber wird nun auch für andere Daten genutzt.

    kool, danke. der link macht zwar keinen sinn, aber ich weiß nun was
    ich wissen muss 😃



  • ich würde jetzt schonmal um feedback bitten. wirkt dies zu kleinkariert,
    oder hilft der umfang beim verständnis?



  • Es ist schon recht umfangreich. Ich würde den Abschnitt 1.2 eventuell verkürzen - und die Details der Umsetzung in einen späteren Artikel auslagern.

    (ein kleiner Layout-Tip: Du kannst deine Absätze auch hintereinander weg schreiben, ohne die Zeilen manuell umzubrechen - wo die Zeilenumbrüche hinpassen, weiß der Browser des Lesers besser als du)



  • sothis_ schrieb:

    Ein Nibble kann Hexadezimalzahlen von

    0x0 - 0xF
    

    speichern, also dezimal

    0 - 16
    

    Das überdenken wir nochmal 😉



  • CStoll schrieb:

    Es ist schon recht umfangreich. Ich würde den Abschnitt 1.2 eventuell verkürzen - und die Details der Umsetzung in einen späteren Artikel auslagern.

    da du der anscheinend der einzige mit dieser meinung bist, steht es 1:1, und
    deshalb lasse ich es so 😃

    CStoll schrieb:

    (ein kleiner Layout-Tip: Du kannst deine Absätze auch hintereinander weg schreiben, ohne die Zeilen manuell umzubrechen - wo die Zeilenumbrüche hinpassen, weiß der Browser des Lesers besser als du)

    geschmackssache, ich finds häßlich, aber ich habs geändert, da sich wohl die
    meisten daran stören. 🙂

    Tim schrieb:

    sothis_ schrieb:

    Ein Nibble kann Hexadezimalzahlen von

    0x0 - 0xF
    

    speichern, also dezimal

    0 - 16
    

    Das überdenken wir nochmal 😉

    danke. ist gefixt 🙂



  • sothis_ schrieb:

    CStoll schrieb:

    Es ist schon recht umfangreich. Ich würde den Abschnitt 1.2 eventuell verkürzen - und die Details der Umsetzung in einen späteren Artikel auslagern.

    da du der anscheinend der einzige mit dieser meinung bist, steht es 1:1, und
    deshalb lasse ich es so 😃

    No problem, ist schließlich dein Artikel

    CStoll schrieb:

    (ein kleiner Layout-Tip: Du kannst deine Absätze auch hintereinander weg schreiben, ohne die Zeilen manuell umzubrechen - wo die Zeilenumbrüche hinpassen, weiß der Browser des Lesers besser als du)

    geschmackssache, ich finds häßlich, aber ich habs geändert, da sich wohl die
    meisten daran stören. 🙂

    Bei den üblichsten Eintellungen passten die Zeilen recht gut auf den Monitor - aber wenn (aus welchen Gründen auch immer) jemand ein etwas kleineres Browser-Fenster oder größere
    Schrift verwendet, ergibt das eine kammartige Textstruktur, die dann miserabel zu lesen ist. (wie gesagt, der Browser setzt selber Zeilenumbrüche, wenn er keinen Platz hat
    - aber er entfernt deine Zeilenumbrüche nicht, wenn sie an der Stelle unpassend wären)

    (edit: Ich hab' den letzten Abschnitt mal umformatiert, um dir das Phänomen vorzuführen)



  • CStoll schrieb:

    Bei den üblichsten Eintellungen passten die Zeilen recht gut auf den Monitor - aber wenn (aus welchen Gründen auch immer) jemand ein etwas kleineres Browser-Fenster oder größere
    Schrift verwendet, ergibt das eine kammartige Textstruktur, die dann miserabel zu lesen ist. (wie gesagt, der Browser setzt selber Zeilenumbrüche, wenn er keinen Platz hat
    - aber er entfernt deine Zeilenumbrüche nicht, wenn sie an der Stelle unpassend wären)

    (edit: Ich hab' den letzten Abschnitt mal umformatiert, um dir das Phänomen vorzuführen)

    nagut, ich seh's ja ein 🙂


Anmelden zum Antworten