kostenloser Webspace werbefrei: lima-city


Bit´s und Bytes

lima-cityForumSonstigesTechnik und Elektronik

  1. Autor dieses Themas

    s*******r

    Hi!
    Kann mir jemand sagen was es mit den Bit´s und Bytes auf sich hat?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. s********s

    Das Bit ist die kleinste Einheit, die ein Computer darstellen kann.
    Es kann nur zwei Zustände aufnehmen/darstellen. (Dual)

    0 = aus / kein Strom
    1 = an / Strom fließt

    Alles was der Computer berechnet, wird in Bits und Bytes dargestellt.

    1 Byte = 8 Bit

    0100 1100 <= Das ist ein Byte. Könnte also ein einziger Buchstabe sein, wenns eine Textdatei wäre.

    1 Kilobyte = 1024 bytes = 8192 bits

  4. Das Bit ist die kleinste Einheit, die ein Computer darstellen kann.
    Es kann nur zwei Zustände aufnehmen/darstellen. (Dual)

    0 = aus / kein Strom
    1 = an / Strom fließt

    Alles was der Computer berechnet, wird in Bits und Bytes dargestellt.

    1 Byte = 8 Bit

    0100 1100 <= Das ist ein Byte. Könnte also ein einziger Buchstabe sein, wenns eine Textdatei wäre.

    1 Kilobyte = 1024 bytes = 8192 bits


    Das ganze ist das Binärzahlensystem.
    Bei Variablen ist aber Vorsicht geboten!
    das erste Bit ist immer das MSB (=Most Significant Bit) welches angibt ob die Zahl positiv (0) oder negativ (1) ist.
    Wodurch sich dann logischerweise der Wertebereich einer "unsigned" Variablen entsprechend verschiebt.
  5. milchreis schrieb:
    Bei Variablen ist aber Vorsicht geboten!
    das erste Bit ist immer das MSB (=Most Significant Bit) welches angibt ob die Zahl positiv (0) oder negativ (1) ist.


    Also irgendwie ist mir das neu.

    Zahlen kleiner 0 erhalten die eins des Negative Flags, bei der 0 wird das Zero Flag gesetzt und bei Zahlen größer 0 wird N,Z gleich 0.

    Bei was für nemm System gibt es ein MSB? So kann man ja nie mit 8Bit (ein Byte) Zahlen hantieren, weil man ja immer das extra Bit braucht, bzw. hat nur 7 Bit Zahlen bei signed Variablen.

    daher kenn ich das ganze nur durch das setzen dieser Flags.

    Gruß Tobi
  6. c*a

    Also nehmen wir mal an, wir haben 1 Byte, das sind acht Bit, das gibt einen Zahlenbereich von 0 bist 255. Und nehmen wir zur Vereinfachung an, wir hätten einen 8-Bit Prozessor.
    Die einfache Interpretation ist, sie alle als positive Zahlen anzusehen. Es geht aber auch anders:
    Wenn der Prozessor 100 + 10 ausrechnen soll, geht das gut, er liefert 110. Soll er aber 100 + 200 ausrechnen, spuckt er 44 aus! Er rechnet nämlich (100 + 200) % 256 = 44 (% ist bekanntlich modulo, d. h. der Rest, der bei einer Division mit 256 bleibt). Schließlich ist 255 die höchste Zahl, mit der er umgehen kann.
    So ergibt z. B. die Rechnung 56 + 200 = 0. Das heißt 56 abziehen ist auf diese Art zu rechnen das gleiche wie 200 addieren!

    200 = -56
    231 = -25
    255 = -1
    100 + 200 = 100 - 56 = 44
    ...für einen 8-Bit Mikroprozessor!

    So kommen die negativen Zahlen ins Spiel beim Computer! Die Zahlen 0 bis 127 einschließlich kann man als positive Zahlen ansehen, die Zahlen von 128 bis 255 als negative Zahlen.
    0 bis 127 ist binär von 00000000 bist 01111111
    128 bis 255 ist binär von 10000000 bis 11111111
    Daher könnte man sagen, das Bit ganz links gibt das Vorzeichen an, 0=positiv, 1=negativ.

    Ich weiß, das war sehr unverständlich. Ich will damit sagen: Es geht um die Interpretation der Zahlen. Für den Prozessor ist es egal ob man die Zahl 11001000 als -56 oder 200 ansieht, auf seine spezielle Art zu rechnen macht beides Sinn. So arbeiten eigentlich alle Mikroprozessoren. Das Negative Flag ist dagegen nicht dazu da, anzugeben ob eine Zahl negativ oder positiv ist, sondern um Branching zu steuern. Das Negative Flag wird gesetzt wenn das MSB des Ergebnis der letzten Rechnung eine 1 ist.
  7. Hi

    Danke für die Erläuterungen. Aber eine Frage hab ich trotzdem noch:

    Also Beispiel: ich habe die Zahl 00000111 und möchte die negieren, sprich mit -1 multiplizieren. Dann erhalte ich ja den Wert: 10000111 wenn mir das erste Bit das Vorzeichen angibt. Nun wäre das alelrdings eine vollkommen andere Zahl wenn ich das Byte als vorzeichenlos betrachte. Wird das Byte daher das Byte irgendwie als vorzeichenbehaftete Zahl deklariert oder zieht der Prozessor die Rechenregeln rücksichtslos durch?

    Bin daher etwas inetressiert da ich ab nächstem Semester anfange mit MST im Nebenstudium, da könnte so triviales Vorwissen wicher nützlich sein.

    Gruß Tobi
  8. Edit: hab erst jetzt gelesen und da ist ja einer meiner meinung *puuuuh* * beruhigt sei*



    milchreis schrieb:
    Bei Variablen ist aber Vorsicht geboten!
    das erste Bit ist immer das MSB (=Most Significant Bit) welches angibt ob die Zahl positiv (0) oder negativ (1) ist.


    Also irgendwie ist mir das neu.

    Zahlen kleiner 0 erhalten die eins des Negative Flags, bei der 0 wird das Zero Flag gesetzt und bei Zahlen größer 0 wird N,Z gleich 0.

    Bei was für nemm System gibt es ein MSB? So kann man ja nie mit 8Bit (ein Byte) Zahlen hantieren, weil man ja immer das extra Bit braucht, bzw. hat nur 7 Bit Zahlen bei signed Variablen.

    daher kenn ich das ganze nur durch das setzen dieser Flags.

    Gruß Tobi


    Das ist ja interessant. Da zeigt sich mal was wir für einen Mist im Info unterricht lernen.
    Also da wird uns nur gesagt das ein Flag gesetzt wird wenn der Bereich überläuft und er im Zahlenkreis dann auf der anderen Seite wieder anfängt.

    Hier mal ein Beispiel direkt aus dem Hefter:

    Die Zahl 3
    In Binär: 011
    Um jetzt -3 zu erhalten folgende Schritte durchführen:
    Das einerinkrement bilden (was das genau ist wurde uns nicht gesagt, nur das es halt alle Ziffern nur eben umgekehrt.) und das ganze dann mit 1 addieren:

    011
    inkrement:
    100
    +1
    ---
    =101
    ====

    so haben wir das gelernt.

    Ich finde das jetzt aber wirklich SEHR interessant das das nicht stimmt.



    Beitrag geaendert: 7.12.2006 15:03:35 von milchreis
  9. Hi

    Also das was ich geschrieben habe stimmt anscheinend auch nicht, habe so nur die Kurzreferenz des Atmega8 interpretiert.

    Aber deine Rechenaufgabe ist echt komisch.

    Also Inkrementieren bedeutet das Byte um ein Bit erhöhen. Invertieren bedeutet alle Bits umkehren.

    Doof ist jetzt nur das wenn man 011 Inkrementiert kommt 100 raus und wenn man 011 invertiert kommt auch 100 raus :wink:.

    Kannst ja mal deine Aufzeichnungen einscnannen und uploaden, mal schaun ob da vielleicht ein kleiner Fehler drinnen ist.

    Gruß Tobi
  10. c*a

    Hallo,

    die Sache ist leider noch komplizierter: Das negative von 00000111 ist nicht einfach 10000111.

    Ich habe nur gesagt, dass alle Zahlen mit einer 1 im Bit ganz links negativ sind. Man nimmt aber eine positive Zahl nicht mit -1 mal indem man das Bit ganz links zu einer 1 macht. Wenn man das macht kommt eine andere negative Zahl raus!

    00000111 = 7

    10000111 = 135


    7 + 135 = 142 = - 114 und nicht Null

    das negative von 00000111 = 7 ist 256 - 7 = 249 = 11111001

    Der "Zahlenkreis" (schönes Wort) sieht also aus:
    positive Zahlen
    0, 1, 2, ..., 127,
    negative Zahlen
    +/-128, 129 (=-127), 130 (=-126), 131 (=-125), ..., 255 (=-1)

    Die Zahl 128 ist die sogenannte Weird Number, weil sie gleichzeitig wie -128 und 128 verhält. Addiert man die Weird Number zu einer positiven Zahl, verhält sie sich wie eine negative, addiert man sie zu einer negativen, verhält sie sich wie eine positive. Ist natürlich eine häufige Quelle für Programmfehler.

    Ein weiteres Problem, wenn ich die Zahlen 128 bis 255 als negative Zahlen ansehe, ist der Overflow an der Stelle 128.

    Die Rechnung 120 + 10 = 130 sieht einfach aus, aber 130 interpretieren wir als -126! Und 120 + 10 = -126 macht nicht viel Sinn. Deswegen setzt der Prozessor dann das Overflow-Flag, damit wir wissen: Aha, das Ergebnis dürfen wir nicht als eine negative Zahl ansehen, sondern als eine positive.

    Wie ich schon sagte, kann man auch alle Zahlen von 0 bis 255 als positive Zahlen ansehen. Dann macht aber das Ergebnis von einer Rechnung wie 200 + 60 = 4 keinen Sinn mehr (sieht man 200 als negativ an, also 200 = -56, ist das Ergebnis der Rechnung vernünftig). Der Prozessor weiß nicht wie wir die Zahlen interpretieren. Daher setzt er für den Fall, dass wir sie alle als positiv ansehen, dann das Carry Flag, um uns zu warnen: Das Ergebnis ist nicht 4, wenn man 200 als positiv ansieht.

    Sehr vereinfacht heißt das:
    Sehe ich die Zahlen als negativ und positiv an, muss ich nur aufs Overflow Flag achtgeben.

    Sehe ich alle Zahlen als positiv an, muss ich nur aufs Carry Flag achten.

    Also wird ein Byte nicht als vorzeichenbehaftet deklariert, es kommt allein auf die Interpretation durch den Menschen bzw. das Programm an. Der Prozessor zieht seine Art zu Rechnen in seinem Zahlenkreis rigoros durch, und in dem machen Aussagen wie 200 = -56 eben durchaus Sinn . Wie man sieht, hat dieser Zahlenkreis nicht sehr viel mit den normalen (ganzen) Zahlen gemeinsam.

    Eine Zahl negiert der Prozessor (8-bit) übrigens so:

    Zahl 3, binär 00000011.

    1.) Invertieren: 11111100
    2.) Das Ergebnis von 1.) inkrementieren (1 addieren): 11111100 + 1 = 1111101 = 253
    und siehe da 253 + 3 = 256 = 0 es stimmt also.

    @milchreis: Bei deinem Beispiel handelt es sich um einen 3-Bit Prozessor (Zahlenbereich 0 bis 7 bzw. -4 bis 3). Hat das dein Lehrer nicht gesagt?
    Zahl 3, binär 011
    1) 100
    2) 101 = 5 = -3
    denn 5 + 3 = 8 = 0 stimmt also.


    Beitrag geaendert: 7.12.2006 21:22:42 von cga

  11. Eine Zahl negiert der Prozessor (8-bit) übrigens so:

    Zahl 3, binär 00000011.

    1.) Invertieren: 11111100
    2.) Das Ergebnis von 1.) inkrementieren (1 addieren): 11111100 + 1 = 1111101 = 253
    und siehe da 253 + 3 = 256 = 0 es stimmt also.


    Hab ich es nciht auch so gerechnet?


    @milchreis: Bei deinem Beispiel handelt es sich um einen 3-Bit Prozessor (Zahlenbereich 0 bis 7 bzw. -4 bis 3). Hat das dein Lehrer nicht gesagt?
    Zahl 3, binär 011
    1) 100
    2) 101 = 5 = -3
    denn 5 + 3 = 8 = 0 stimmt also.


    Logischerweise hat er, vorher ging's ja um Wertebereiche für Variablen mit n Bit
    Das ist doch aber nun wirklich schnurz pieps egal!
    Es ging im übrigen um Variablen bei Turbopascal, wobei als Rechen BEISPIEL erstmal ne 3 Bit Variable dran kam.

    ===
    Kann es sein das wir alle irgendwie das selbe sagen aber es nur anders schreiben??

    Beitrag geaendert: 8.12.2006 8:30:17 von milchreis
  12. c*a


    Logischerweise hat er, vorher ging's ja um Wertebereiche für Variablen mit n Bit
    Das ist doch aber nun wirklich schnurz pieps egal!
    Es ging im übrigen um Variablen bei Turbopascal, wobei als Rechen BEISPIEL erstmal ne 3 Bit Variable dran kam.

    Na so schnurz piep egal ist es auch wieder nicht, schließlich wirkt es sich aufs Ergebnis aus. Übrigens woher sollte ich wissen, dass es sich um Turbopascal-Variablen handelt?
    Vernünftige Programmiersprachen fangen überhaupt erst bei 8-Bit Zahlen an.


    Kann es sein das wir alle irgendwie das selbe sagen aber es nur anders schreiben??

    Ja!
    Für mich ging halt aus den letzten Beiträgen hervor, dass noch Klärungsbedarf besteht (z. B. Unterschied zwischen Carry Flag und Overflow Flag, funktioniert das negieren tatsächlich).
    SO einfach ist das ja auch schließlich nicht zu verstehen. Und wenn ich bei meinem letzten Post "altbekanntes" wiederholt habe, war das nicht um hier irgendwem zu widersprechen.

    Noch eine kleine Anmerkung:
    In einer Programmiersprache wie C, kann man zwar Variablen als signed oder unsigned deklarieren. Klar sein sollte einem dabei, dass der Prozessor davon gar nichts mitbekommt und in beiden Fällen genau gleich rechnet. Es wird C intern gespeichert ob vorzeichenbehaftet deklariert wurde oder nicht und die Zahl wird dann unterschiedlich interpretiert. Bei Assembler wird einem diese Arbeit nicht abgenommen.

    UND: es heißt nicht Einerinkrement sondern Einerkomplement.
  13. na dann ist ja gut
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!