Bit´s und Bytes
lima-city → Forum → Sonstiges → Technik und Elektronik
ansehen
auf
beispiel
beitrag
bit
byte
computer
ergebnis
gebot
gruss
kilobyte
letzte
milchreis
most
overflow
positiv
prozessor
sinnen
vorsicht
zahlenbereich
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 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. -
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. -
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 -
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 -
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 -
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. -
na dann ist ja gut
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage