Bits und Bytes: Helft mir! :-)
-
hallo zusammen
ich möchte gerne tieferes wissen in bezug auf die kleinste speichereinheit "bits" entwickeln. ich programmiere bereits seit einigen jahren in C++ und habe mich leider nie tief mit den bit's ansich auseinander gesetzt. mir ist klar das ein byte aus 8 bits, also 00000000 zusammengesetzt wird. mit einem byte lassen sich nun 256 verschiedene zeichen darstellen, die allerdings als zahlen dargestellt werden, nähmlich von 0 bis 255, stimmt das soweit? demnach wäre ein char ein gutes beispiel für meine nächste frage.
ein char hat ja genau 1 byte. die möglichkeiten sind also von 0 bis 255 = 256 möglichkeiten. gehe ich richtig der annahme das der computer ansich garkeine buchstaben kennt, sondern wirklich nur zahlen und prinzipiel nur die 0 und die 1, welche er dann aus einer zahlen folge, z.B. den buchstaben A binär interpretiert? das wäre dann z.B.:
128 64 32 16 8 4 2 1
0 1 0 0 0 0 0 1
128*0, 64*1, 32*0, 16*0, 8*0, 4*0, 2*0, 1*1somit ist A eigentlich ein integer wert 65. stimmt das soweit? und sowas geht dann 256 mal, ja? wie sieht es denn z.B. mit einem funktions-call aus, wie genau muss man sich sowas vorstellen, wenn z.b. Func(); ausgeführt wird. vorstellen könnte ich mir nun, das die adresierung der funktion binär vorliegt und der computer weiss anhand der adressierung die binär vorliegt, welche funktion er ausführen muss. aber woher wiess er, in nullen und einsen gesehen, das er überhaupt eine programm-funktion ausführen soll?
dann habe ich noch eine frage zum typ int, welcher ja im 32 bit system mit 4 bytes belegt wird. ich dachte nun eigentlich das der wertebereich sich so erreichnet:
256 256 256 256
soll heissen, der wertebereich wäre 12stellig, da er sich aus 4 einzelnen bytes zusammensetzt und somit dann eigentlich 12 stellen haben sollte, er hat aber 10!?.ich habe noch viele andere fragen, aber damit möchte ich euch jetzt nicht plagen, sondern vielmehr fragen (huch, ein reim), ob ihr mir ein buch wärmstens empfehlen könnt, wo alles über bits und bytes beschrieben und erklärt wird, welches keiner programmiersprache gewitmet wurde, sondern einfach um die thematik ansich geht. so, dass ich am ende sagen kann: ich weiss alles über die bit's.
für mich als programmierer weiss ich natürlich wie variablen und funktionen im arbeitsspeicher ihr leben finden und wie sie aggieren. aber wie bereits beschrieben, möchte ich alles über den ganzen hintergrund erharen und lernen, der soweit geht, dass er garnicht mal mehr umbedingt mit dem programmieren zu tun hat, sondern eben, wie der prozessor überhaupt ein programm zum laufen bekommt, wenn er ja nur nullen und einsen versteht.
für mich sieht das ganze simpel gesagt so aus:
C++ programmcode -> Maschinensprache -> binär-system
man sagt ja immer der computer versteht den maschinencode, also assembler aber man muss ja das binär-system ja auch damit miteinbeziehen. so. hope you can help me!
vielen dank fürs lesen.
-
bitty schrieb:
hallo zusammen
ich möchte gerne tieferes wissen in bezug auf die kleinste speichereinheit "bits" entwickeln. ich programmiere bereits seit einigen jahren in C++ und habe mich leider nie tief mit den bit's ansich auseinander gesetzt. mir ist klar das ein byte aus 8 bits, also 00000000 zusammengesetzt wird. mit einem byte lassen sich nun 256 verschiedene zeichen darstellen, die allerdings als zahlen dargestellt werden, nähmlich von 0 bis 255, stimmt das soweit?
ja
ein char hat ja genau 1 byte. die möglichkeiten sind also von 0 bis 255 = 256 möglichkeiten. gehe ich richtig der annahme das der computer ansich garkeine buchstaben kennt, sondern wirklich nur zahlen und prinzipiel nur die 0 und die 1, welche er dann aus einer zahlen folge, z.B. den buchstaben A binär interpretiert? das wäre dann z.B.:
128 64 32 16 8 4 2 1
0 1 0 0 0 0 0 1
128*0, 64*1, 32*0, 16*0, 8*0, 4*0, 2*0, 1*1somit ist A eigentlich ein integer wert 65. stimmt das soweit? und sowas geht dann 256 mal, ja?
ja
wie sieht es denn z.B. mit einem funktions-call aus, wie genau muss man sich sowas vorstellen, wenn z.b. Func(); ausgeführt wird. vorstellen könnte ich mir nun, das die adresierung der funktion binär vorliegt und der computer weiss anhand der adressierung die binär vorliegt, welche funktion er ausführen muss. aber woher wiess er, in nullen und einsen gesehen, das er überhaupt eine programm-funktion ausführen soll?
Am besten du lernst etwas Assembler, wenn dich das interessiert. Da kannst du Programme schreiben die fast Maschinensprache sind, der Assembler übersetzt dann deinen Code in Binärcode. Im Prinzip gibt es bei "moderner" Hardware Befehle um Daten in Register zu schreiben, mit Registern zu rechnen, abhängig von Registerwerten zu anderen Codestellen zu springen usw. Ein Sprung sieht im Prinzip so aus, dass in ein spezielles Register, den Instruction Pointer, die Adresse des nächsten Befehls geschrieben wird.
dann habe ich noch eine frage zum typ int, welcher ja im 32 bit system mit 4 bytes belegt wird. ich dachte nun eigentlich das der wertebereich sich so erreichnet:
256 256 256 256
soll heissen, der wertebereich wäre 12stellig, da er sich aus 4 einzelnen bytes zusammensetzt und somit dann eigentlich 12 stellen haben sollte, er hat aber 10!?.Mit deinem System wäre die Zahl 250 250 250 300 nicht möglich. Bei 8 Bit hast du 2^8 = 256 Möglichkeiten bei 32 Bit hast du 2^32 = 4 294 967 296 Möglichkeiten.
-
bitty schrieb:
ich programmiere bereits seit einigen jahren in C++ und habe mich leider nie tief mit den bit's ansich auseinander gesetzt.
dann bist du aber ein sehr seltenes exemplar.
bitty schrieb:
256 256 256 256
soll heissen, der wertebereich wäre 12stellig, da er sich aus 4 einzelnen bytes zusammensetzt und somit dann eigentlich 12 stellen haben sollte, er hat aber 10!?.wenn du das 'mal'-zeichen zwischen die 256's setzt, dann hast du das richtige ergebnis --> 256^4 == 2^32 ist eine zehnstellige dezimalzahl.
und schau auch mal hier: http://en.wikipedia.org/wiki/Numeral_system
-
bitty schrieb:
ich habe noch viele andere fragen, aber damit möchte ich euch jetzt nicht plagen, sondern vielmehr fragen (huch, ein reim), ob ihr mir ein buch wärmstens empfehlen könnt, wo alles über bits und bytes beschrieben und erklärt wird, welches keiner programmiersprache gewitmet wurde, sondern einfach um die thematik ansich geht. so, dass ich am ende sagen kann: ich weiss alles über die bit's.
für mich als programmierer weiss ich natürlich wie variablen und funktionen im arbeitsspeicher ihr leben finden und wie sie aggieren. aber wie bereits beschrieben, möchte ich alles über den ganzen hintergrund erharen und lernen, der soweit geht, dass er garnicht mal mehr umbedingt mit dem programmieren zu tun hat, sondern eben, wie der prozessor überhaupt ein programm zum laufen bekommt, wenn er ja nur nullen und einsen versteht.
Ich glaub das Zauberwort für dich heisst "Digitaltechnik". Zu dieser Thematik gibt es unzählige Bücher wie man sich vorstellen kann. Vielleicht kannst du dir ja irgend eins einfach aus einer Bücherei ausleihen (darf auch ruhig älter sein, weil sich die Prinzipien seit ihrer Gründung nicht geändert haben und dies wohl auch in Zukunkt so bleiben wird ;-)).
Im Prinzip besteht ein Prozessor aus relativ primitiven "Blöcken". Es gibt im wesentlichen "Register" und "Rechenwerke". Bei den Registern handelt es sich um statischen Speicher in dem die "Bits" gespeichert sind, je nach Registertyp mit einer Breite von 8, 16, 32, 64 ... Bit.
Bei den Rechenwerken handelt es sich um z.B. Addierer, Subtrahierer oder Multiplizierer, welche die Inhalte der Register verrechnen und anschließend das Ergebnis wieder in ein weiteres Register speichern.
Im Bereich der Digitaltechnik gibts natürlich trotzdem eine ganze Menge zu wissen. Angefangen von der Boolschen Algebra, den Grundlogikgattern, hin zu Schaltwerken sowie komplexeren Rechenwerken. Alles was ich bisher erwähnt habe sind die absoluten Basics, die aber ausreichen sollten um den Begriff "Bit" besser verstehen zu können.Nach durchlesen der elementaren Sachen würd ich einfach ein paar Beispiele mit Bitoperationen versuchen. Die Sprache stellt alles zur Verfügung "&,|"
-
dann bist du aber ein sehr seltenes exemplar.
das mag gut sein. ich habe mich jahrelang intensiv mit C++ als sprache beschäftigt und leider viel zu wenig mit der digitaltechnik. was ich jetzt aber nachholen werde, weil mich das sehr fasziniert. die bitweisen operatoren sind mir natürlich sher geläufig und ich wende sie auch an.
einfach und wirklich simpel gesagt, funktioniert der ganze computer als ein ganzer schaltkreis. dieser widerum ist bestickt aus einem ganzen netzwerk von komponenten, wie transistoren, microchips, stromleiter und so weiter. je nach zustand wird das "platinen-netzwerk" (so nenn ich das mal), anderst geschaltet und den komponenten wird ein binärer wert übergeben, die dann zur aufgabe ausgeführt werden, diese komponenten wiederum schalten neue knoten usw. irgendwann geht alles seinen weg über den BIOS chip, über den prozessor, den arbeitsspeicher, den festplatten kontroller, zur festplatte und auch irgendwann an den bildschirm.
und ich möchte nun eben den hardware hintergrund komplett verstehen, also wirklich die phisikalsische ebene, die elektronische seite. ich danke euch für euer feedback. für spezifizierte buch empfehlungen habe ich gerne ein offenes ohr.
-
also gaaaanz gaaaaaanz simpel und vereinfacht gesagt:
0 = strom fliesst nicht
1 = strom fliesstmehr physik ist da nicht drin, der rest ist logik
-
stromer schrieb:
also gaaaanz gaaaaaanz simpel und vereinfacht gesagt:
0 = strom fliesst nicht
1 = strom fliesstmehr physik ist da nicht drin, der rest ist logik
das sich dieses gerücht aber auch so hartnäckig hält. Die Zustände werden eben *nicht* durch "Strom fließt" bzw. "Strom fließt nicht" modelliert. Sonst hätten Computer eine enorme Leistungsaufnahme. Entweder es liegt Spannung an, oder eben nicht. Den Stromfluß versucht man möglichst gering zu halten.
-
wenn man hinter die bits schauen möchte, sollte man sich einfach mal das duale zahlensystem angucken. woher es kommt und warum es so elegant und simpel ist. dann guckt man sich die defintion einer turing maschine an. und dann versteht man auch, warum die meisten modernen rechner mit bits jonglieren.
-
@ stromer
Witzigerweise fließt der Strom bei FET eigentlich hauptsächlich beim Übergang 0->1 bzw. 1->0Noch ein paar Dinge die mir aufgefallen sind:
<pedantic>
- Ein Byte besteht nicht zwangsweise aus 8 Bits: http://de.wikipedia.org/wiki/Byte
- ein char kann unsigned oder signed sein
- Nicht allen Plattformen liegt der ASCII-Zeichensatz zugrunde (d.h. der Dezimalwert des ASCII-Zeichens 'A' ist nicht immer 65)
</pedantic>
-
@ Jester:
Obacht. Bei den heutzutage extremen Schaltfrequenzen kann es sein, dass die Bipolartechnik in manchen Bereichen als "stromsparende" Alternative gehandelt wird. Hab da mal einen recht interessanten Artikel zu gelesen, aber weiss nicht mehr wo
-
und ich möchte nun eben den hardware hintergrund komplett verstehen, also wirklich die phisikalsische ebene, die elektronische seite. ich danke euch für euer feedback. für spezifizierte buch empfehlungen habe ich gerne ein offenes ohr.
Wenn du in das Thema richtig einsteigen willst, dann kann ich nur empfehlen, selbst ein bisschen Digitallogik zu entwickeln. Dazu musst du dich mit einer der Hardwarebeschreibungssprachen auseinandersetzen (vorzugsweise VHDL oder Verilog).
Der einfachste Einstieg in das Gebiet der Logikentwicklung geht über die programmierbare Logik (CPLDs und FPGAs). Alles was du zum starten brauchst gibts kostenlos im Netz inklusive Simulationsumgebung.
http://www.xilinx.com/ise/logic_design_prod/webpack.htm
-
bergvagabund schrieb:
Alles was du zum starten brauchst gibts kostenlos im Netz inklusive Simulationsumgebung.
http://www.xilinx.com/ise/logic_design_prod/webpack.htmCool, wusste nicht, dass es da was kostenloses gibt
Bevor ich mir dort einen Account hole und das Ding teste, bringt es das was es verspricht?
-
http://www.xilinx.com/ise/logic_design_prod/webpack.htm
Cool, wusste nicht, dass es da was kostenloses gibt
Bevor ich mir dort einen Account hole und das Ding teste, bringt es das was es verspricht?Na logisch. Das Webpack kann eigentlich alles was die große Foundation auch kann. Es werden lediglich die ganz großen FPGAs nicht unterstützt. Aber der Xilinx Simulator ist auf jeden Fall mit dabei. Ob man wie früher auch einen kostenlosen Modelsim registrieren kann weiss ich jetzt nicht.
In der Arbeit habe ich natürlich einen ungebremsten Modelsim und die große Foundation am laufen. Für neuere Sachen nehme ich aber gerne auch mal das Webpack her und bin auch ganz zufrieden damit.
Der einzigste Wehrmutstropfen ist die Installationsgröße. Mit der Version 10.1 spielt man sich schon etwas mehr als 4GByte auf die Platte.
-
bergvagabund schrieb:
Mit der Version 10.1 spielt man sich schon etwas mehr als 4GByte auf die Platte.
Danke dir. Werde mir das mal genauer anschauen.
-
bitty schrieb:
und ich möchte nun eben den hardware hintergrund komplett verstehen, also wirklich die phisikalsische ebene, die elektronische seite.
vielleicht mal sowas ähnliches was basteln:
http://www.mycpu.eu/
...probier mal damit run: http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/index.html
und hier noch was zum lesen: http://books.google.com/books?id=qFdnpRhz0HcC&printsec=frontcover&source=gbs_summary_r&cad=0#PPP1,M1