Forum: Mikrocontroller und Digitale Elektronik µC 8-Bit 16-Bit 32-Bit Arbeitsweise??


von Heizer (Gast)


Lesenswert?

Hallo,

im Netzt habe ich bezüglich der Unterschied einige Beiträge gefunden, 
allerdings wird immer die selbe Erklärung abgegeben.
Dass ein 8-Bit in einem Zug max. bis 256 zahlen Berechnen kann und 
16-Bit bis 16^2 und so weiter...
Aber was ich hier nicht verstehe ist, wie das im Code zu verstehen ist. 
Wenn ich z.B mit ein 8-Bit µC in einer Weil-Schleife ein wert x immer 
mit 2 Addiere:

int main()
{
  int x = 0;

  while ( x < 200)
  {
      x=x+2;
  }

}

was zählt hier alles zu dieser max. 256 berechenbare Zahlen?!

ich meine, die Ausführung von   "int x = 0;" ist am endefekt auch ein 
Rechenschritt oder   "while ( x < 200)". Der Code ist ja nicht nur 
rechne mal x=x+2;

was ist hier mein Denkfehler. Danke im Voraus

Gruß
Heizer

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mit einer ordentlichen Compileroptimierung würde hier gar nichts
gerechnet werden, sondern x auf die Konstante 200 gesetzt, und dann
geht's weiter …

In erster Linie beschreibt diese Zahl die Breite von Datenbus und
Registern.  Dabei schließt es noch nicht einmal aus, dass bspw. ein
8-bit-Prozessor auch 16-bit-Arithmetik eingebaut hat.  Sowas gab's
schon beim Z80.

: Bearbeitet durch Moderator
von picalic (Gast)


Lesenswert?

Hallo,

ein großer Denkfehler ist schonmal dieser: wenn Du in C programmierst, 
hast Du mit der darunterliegenden CPU-Architektur (ob 8-16-32 Bit oder 
1-Bit Turing-Maschine) nichts zu tun!
Und: die Einschränkung z.B. bei 8 Bit auf 256 Werte bezieht sich auf die 
Zahlengröße, die der Prozessor intern mit nur einer Operation 
verarbeiten kann. Natürlich kann er auch größere Zahlen verarbeiten, muß 
dafür aber schon mehrere Rechenschritte nacheinander verarbeiten. Diese 
werden ihm (hoffenlich zielführend ;) vom Programmierer direkt 
(Assembler) oder durch den Compiler vorgegeben.

Gruß,

Thomas

von Maik S. (yellowbird)


Lesenswert?

Mit einem 8 Bit µC kannst du nicht in einem Schritt 200 + 200 rechnen.
Hierfür sind mehrere Schritte notwendig.

Und 16 Bit = 2^16 Möglichkeiten (nicht 16^2)

bei + 2 addieren und einem 8Bit uInt würde der Zähler zählen :

2
4
6
...
250
252
254
0
2

Du kannst auf einem 8Biter auch ein 16Bit int definieren. Funktioniert, 
da der Compiler weiß, wie er damit umzugehen hat. Kostet aber massig 
Rechenzeit.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Maik S. schrieb:
> Kostet aber massig Rechenzeit.

Das ist eine maßlose Übertreibung.  Es kostet genau einen Takt mehr,
für die zweite Addition in der ALU.

64-Bit Ganzzahlen mögen auf einem kleinen 8-Bitter „massig Rechenzeit“
kosten.

von m.n. (Gast)


Lesenswert?

Maik S. schrieb:
> Mit einem 8 Bit µC kannst du nicht in einem Schritt 200 + 200 rechnen.

Doch, das ergibt 144 und ein gesetztes Überlauf-Flag (carry).

Maik S. schrieb:
> Du kannst auf einem 8Biter auch ein 16Bit int definieren. Funktioniert,
> da der Compiler weiß, wie er damit umzugehen hat. Kostet aber massig
> Rechenzeit.

Die Definition kostet keinerlei Rechenzeit. Die Rechnerei mit 16 Bit 
Zahlen geht recht schnell.

von Maik S. (yellowbird)


Lesenswert?

picalic schrieb:
> Hallo,
>
> ein großer Denkfehler ist schonmal dieser: wenn Du in C programmierst,
> hast Du mit der darunterliegenden CPU-Architektur (ob 8-16-32 Bit oder
> 1-Bit Turing-Maschine) nichts zu tun!
> Und: die Einschränkung z.B. bei 8 Bit auf 256 Werte bezieht sich auf die
> Zahlengröße, die der Prozessor intern mit nur einer Operation
> verarbeiten kann. Natürlich kann er auch größere Zahlen verarbeiten, muß
> dafür aber schon mehrere Rechenschritte nacheinander verarbeiten. Diese
> werden ihm (hoffenlich zielführend ;) vom Programmierer direkt
> (Assembler) oder durch den Compiler vorgegeben.
>
> Gruß,
>
> Thomas

Hallo,

Prinzipiell hast du recht. Allerdings sind die Standarddefinitionen von 
"int" etc. schon von der zu Grudne liegenen Architektur abhängig, oder ?

von Rolf Magnus (Gast)


Lesenswert?

Heizer schrieb:
> Dass ein 8-Bit in einem Zug max. bis 256 zahlen Berechnen kann und
> 16-Bit bis 16^2 und so weiter...

Nein. Es bedeutet, daß eine Zahl, die auf einmal verarbeitet werden 
kann, nur 256 verschiedene mögliche Zustände kennt, also z.B. bei einem 
vorzeichenlosen Integer den Bereich von 0 bis 255. Will man mit größeren 
Zahlen arbeiten, muss man die Berechnungen aus mehreren separaten 
8-Bit-Berechnungen zusammenstückeln.

> int main()
> {
>   int x = 0;
>
>   while ( x < 200)
>   {
>       x=x+2;
>   }
>
> }
>
> was zählt hier alles zu dieser max. 256 berechenbare Zahlen?!

Gar nichts. Das hat damit überhaupt nichts zu tun. x ist ein int, der 
auf 8-bit-µCs in der Regel 16 Bit breit ist. Die Addition kann also 
nicht als einzelne Aktion durchgeführt werden, sondern muss aus zwei 
8-Bit-Additionen zusammengesetzt werden. Auf einem 16-Bit-System dagegen 
gibt es eine direkte 16-Bit-Addition.

Jörg Wunsch schrieb:
> Maik S. schrieb:
>> Kostet aber massig Rechenzeit.
>
> Das ist eine maßlose Übertreibung.  Es kostet genau einen Takt mehr,
> für die zweite Addition in der ALU.

Oder mit anderen Worten: Doppelt so viel.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Maik S. schrieb:
> Allerdings sind die Standarddefinitionen von "int" etc. schon von der zu
> Grudne liegenen Architektur abhängig, oder ?

Jein: ‘int’ umfasst gemäß C-Standard immer mindestens den Wertebereich
von -32767 bis +32767, benötigt also wenigstens 16 Bit.

Rolf Magnus schrieb:
>> Das ist eine maßlose Übertreibung.  Es kostet genau einen Takt mehr,
>> für die zweite Addition in der ALU.
>
> Oder mit anderen Worten: Doppelt so viel.

Wobei das eine Milchmädchenrechnung ist, da ringsum meist so viel
anderes „Beiwerk“ anfällt, dass die eigentliche CPU-Zeit für die
Rechnung kaum noch ins Gewicht fällt.

von Maik S. (yellowbird)


Lesenswert?

Jörg Wunsch schrieb:
> Das ist eine maßlose Übertreibung.  Es kostet genau einen Takt mehr,
> für die zweite Addition in der ALU.

Hmm...
Bei de Addition hier ok, wobei +100% in meinen Augen schon viel ist.

Wenn man Multipliziert oder dividiert ist der Faktor aber wesentlich 
höher, da dann sogar 32Bit Zahlen möglich sind.
Gerade am Anfang bin ich gerne über solche "Kleinigkeiten" gestolpert.

von Heizer (Gast)


Lesenswert?

Danke für die Erklärungen.

Also das heist jetzt;
Wenn ein 8-Bit und 1MHz µC nur mit Zahlen zwischen 0-256 Arbeitet würde 
er auch die 1Mhz einhalten, also 1 Milion Befehle in der Sekunde?
wenn nur ein Zahl größer als 256 abgearbeitet wird dann habe ich 999999 
Schritte in der Sekunde. Richtig?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Maik S. schrieb:
> Wenn man Multipliziert oder dividiert ist der Faktor aber wesentlich
> höher, da dann sogar 32Bit Zahlen möglich sind.

Hängt aber auch wieder von der Hardware ab.

Beispiel: der AVR als 8-Bitter hat in den besser ausgebauten Versionen
einen 16-Bit-Multiplizierer als Hardware an Bord, der genauso in zwei
Taktzyklen multiplizieren kann, wie die CPU zwei 16-Bit-Zahlen addieren
könnte.

Die Register-/Busbreite sagt also nur in starken Grenzen etwas darüber
aus, wie schnell es am Ende wirklich abläuft.  Wenn einen die Details
interessieren, muss man sich schon in die konkrete Architektur
einlesen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Heizer schrieb:
> 1 Milion Befehle in der Sekunde?

Das ist doch nur eine ganz grobe Hausnummer!

In vielen praktischen Fällen wird die tatsächliche
Verarbeitungsgeschwindigkeit überhaupt nicht von der Rechenzeit
dominiert, sondern von dem, was rundum passiert (Speicherzugriffe,
IO-Zeiten).

Du theoretisierst das viel zu sehr.  Wende dich lieber praktischen
Aufgaben zu. ;-)

von Rolf Magnus (Gast)


Lesenswert?

Jörg Wunsch schrieb:
>> Oder mit anderen Worten: Doppelt so viel.
>
> Wobei das eine Milchmädchenrechnung ist, da ringsum meist so viel
> anderes „Beiwerk“ anfällt, dass die eigentliche CPU-Zeit für die
> Rechnung kaum noch ins Gewicht fällt.

Naja, was fällt denn so an? Werte aus dem Speicher lesen. Braucht auch 
doppelt soviel Zeit. Werte vergleichen auch. Werte von A nach B kopieren 
ebenfalls. Wenn du nur eine 8-Bit-Instruktion durch eine mit 16 Bit 
ersetzt, merkt man natürlich keinen signifikanten unterschied. Wenn man 
aber alles von 8 auf 16 bit umstellt, schon.

Heizer schrieb:
> Also das heist jetzt;
> Wenn ein 8-Bit und 1MHz µC nur mit Zahlen zwischen 0-256 Arbeitet würde
> er auch die 1Mhz einhalten, also 1 Milion Befehle in der Sekunde?

1 MHz heißt eine Million Taktzyklen pro Sekunde. Wieviele Befehle in 
der Zeit ausgefürt werden, hängt vom Prozessor und von den 
auszuführenden Instruktionen ab.

> wenn nur ein Zahl größer als 256 abgearbeitet wird dann habe ich 999999
> Schritte in der Sekunde. Richtig?

Wenn du auf einem AVR (Additon in 1 Taktzyklus) eine Million mal 
hintereinander ohne Sprung oder sonstige Dinge dazwischen nur Zahlen 
addierst und sonst nichts tust und alle sind 8-bit-Zahlen und nur ein 
paar sind 16-Bit-Zahlen, dann würde das stimmen.

von m.n. (Gast)


Lesenswert?

Heizer schrieb:
> Wenn ein 8-Bit und 1MHz µC nur mit Zahlen zwischen 0-256 Arbeitet würde
> er auch die 1Mhz einhalten, also 1 Milion Befehle in der Sekunde?
> wenn nur ein Zahl größer als 256 abgearbeitet wird dann habe ich 999999
> Schritte in der Sekunde. Richtig?

Ein 8-Bitter kann nur mit Zahlen von 0-255 arbeiten.
Wenn er 1 Millionen Schritte/Sekunde abarbeitet, dann macht er das 
immer, egal was es zu tun gibt.

Jörg Wunsch schrieb:
> Du theoretisierst das viel zu sehr.  Wende dich lieber praktischen
> Aufgaben zu. ;-)

So ist es!

von Heizer (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Heizer schrieb:
>> 1 Milion Befehle in der Sekunde?
>
> Das ist doch nur eine ganz grobe Hausnummer!
>
> In vielen praktischen Fällen wird die tatsächliche
> Verarbeitungsgeschwindigkeit überhaupt nicht von der Rechenzeit
> dominiert, sondern von dem, was rundum passiert (Speicherzugriffe,
> IO-Zeiten).
>
> Du theoretisierst das viel zu sehr.  Wende dich lieber praktischen
> Aufgaben zu. ;-)

ja ich weis:) Ich möchte es ja erst verstehen.


Noch eine Frage taucht jetzt auf.

Einmal ist die Rede von 1 Milion Taktzyklen und einmal Schritte. Was ist 
was und kann mir eine ein Beispiel Code zeigen was z.B ein Schritt sein 
könnte oder ein Taktzyklus. Danke

von Rolf Magnus (Gast)


Lesenswert?

Heizer schrieb:
> Einmal ist die Rede von 1 Milion Taktzyklen und einmal Schritte. Was ist
> was und kann mir eine ein Beispiel Code zeigen was z.B ein Schritt sein
> könnte oder ein Taktzyklus. Danke

Den Begriff "Schritt" hast du hier eingeführt. Also mußt du uns 
eigentlich sagen, was damit gemeint ist.
Bei den Antworten wurden verschiedene Definitionen angenommen. Gemeint 
sein kann ein Taktzyklus oder die Ausführung einer Instruktion. Eine 
Instruktion kann je nach Prozessor einen oder mehrere Taktzyklen 
brauchen oder mit nachfolgenden Instruktionen gemeinsam in einem 
Taktzyklus ausgeführt werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Naja, was fällt denn so an?

Entscheidungen, Sprünge.  In der Praxis ist eine 16-Bit-CPU (bspw. ein
MSP430) kaum schneller als eine vergleichbar moderne 8-Bit-CPU (wie
ein AVR).

Dass ein 32-Bit-ARM mit oftmals viel höherer Taktfrequenz schneller
ist, ist wiederum kaum verwunderlich, wobei er als echter RISC eben
auch keine Speicheradresse mit einem Befehl laden kann.  Ohne den
Thumb-Befehlssatz (der die Codedichte enorm zunehmen lassen hat)
wäre ich mir gar nicht mal so sicher, ob der ARM den Siegeszug hätte
bestreiten können, auf dem er momentan ist.

von Pandur S. (jetztnicht)


Lesenswert?

Es gibt Architekturen, bei denen laeuft ein einfacher Befehle in einem 
Taktzyklus, bei anderen braucht's 4 oder 12 Taktzyklen fuer einen 
einfachen befehl. kompliziertere Befehle brauchen das doppelte, drei, 
oder vierfache einen einfachen befehles.

einfacher befehl : Inc, dec
nicht einfach : add
komplizierter : call

Siehe ASM instruction manual des betreffenden controllers.

von Rolf Magnus (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Rolf Magnus schrieb:
>> Naja, was fällt denn so an?
>
> Entscheidungen, Sprünge.

Entscheidungen auf Basis von Vergleichen. Zwei 16-Bit-Werte vergleichen 
kostet natürlich genau wie zwei 16-Bit-Werte addieren doppelt soviel wie 
bei 8 Bit. Der Sprung selbst natürlich nicht. Auf einem AVR brauche ich 
also bei 16 Bit 33% mehr Zeit (4 statt 3 Zyklen), wenn der Sprung 
stattfindet, 50% mehr (3 statt 2 Zyklen), wenn er nicht stattfindet.

> In der Praxis ist eine 16-Bit-CPU (bspw. ein MSP430) kaum schneller als
> eine vergleichbar moderne 8-Bit-CPU (wie ein AVR).

Bei gleichem Takt und gleicher "Takt-Effizienz" der Befehle? M.a.W. 
braucht ein MSP430 auch nur einen Taktzyklus pro Addition, und kann er 
gleichzeitig auf Daten und Code zugreifen? Sonst kann man es nicht 
vergleichen.

> Dass ein 32-Bit-ARM mit oftmals viel höherer Taktfrequenz schneller
> ist, ist wiederum kaum verwunderlich, wobei er als echter RISC eben
> auch keine Speicheradresse mit einem Befehl laden kann.

Und du meinst, wenn man ARMe 8 Bit breit, aber sonst gleich aufbauen 
würde, daß die kaum langsamer wären als in 32 Bit?

> Ohne den Thumb-Befehlssatz (der die Codedichte enorm zunehmen lassen hat)

Ist das wirklich so extrem? Ich habe den Unterschied noch nie in der 
Praxis angeschaut, aber soweit ich weiß, braucht man bei Thumb mehr 
Instruktionen, die dafür aber jeweils halb so groß sind. Also 
Platzersparnis < 50%, dafür mehr Rechenzeit.

von Heizer (Gast)


Lesenswert?

hmm,

Das heist also dass allein Bit Zahl und Frequenz/Takt Angaben nicht 
ausreichen um eine Aussage zu treffen, ob jene µC schneller ist oder 
langsammer. Mann müsste zusätzlich in den Architekutr sich 
reinschnupper.

Aber nicht destotrotzt sind es doch signifikante Angaben oder?

von Karl H. (kbuchegg)


Lesenswert?

Heizer schrieb:

> Noch eine Frage taucht jetzt auf.
>
> Einmal ist die Rede von 1 Milion Taktzyklen und einmal Schritte. Was ist
> was und kann mir eine ein Beispiel Code zeigen was z.B ein Schritt sein
> könnte oder ein Taktzyklus. Danke

Ich würde es so veranschaulichen.

In der Grundschule hast du das kleine Einmal Eins auswendig gelernt.

Um 5 * 7 zu 'rechnen' brauchst du nicht wirklich gross rechnen, sondern 
du kannst das Ergebnis 'in einem Schritt' angeben.

Das bedeutet aber nicht, dass du nicht auch größere Zahlen 
multiplizieren kannst. Du hast auch gelernt, wie du 34 * 78 rechnen 
kannst. Nur eben nicht 'in einem Schritt'. Du benutzt eine Vorschrift, 
wie du mit den 'einfacheren Operationen' die komplexeren zusammensetzen 
kannst.

In diesem Zusammenhang könnte man sich eine 8 Bit CPU wie dich 
vorstellen, der eben nur im Zahlenraum bis 100 die Operation 
'Multiplikation' durchführen kann. Für alles darüber hinausgehende, 
musst du Algorithmen anwenden, wie du auf komplexere Art und Weise die 
gewünschte Operation machen kannst. Eine 16 Bit CPU wäre dann zb jemand, 
der nicht nur wie du die Multiplikationen bis 10 * 10 in einem Schritt 
machen kann, sondern alle Multiplikationen bis 100 * 100. Für alles was 
darüber hinausgeht, benutzt er ebenfalls wieder die Algorithmen. Aber 
das was für dich bei 34 * 78 noch Aufwand war, das ruft der 'in einem 
Schritt ab'. Eine CPU mit noch größerer Bitbreite könnte dann zb alle 
Multiplikationen bis 1000 * 1000 'in einem Schritt' rechnen.

Du siehst also: Eine 8 Bit CPU kann selbstverständlich auch mit größeren 
Datenbreiten 'umgehen' (im Sinne von: man kann die Berechnung dort 
durchführen). Nur kann sie das eben nicht 'in einem Schritt' machen, 
sondern muss die Operation gegebenenfalls aus mehreren einfachen 
Schritten zusammensetzen.

Und nein, so wie du das jetzt versuchst zu rechnen, so einfach ist das 
nicht. Das sind Milchmädchenrechnungen, die du anstellst. In der Praxis 
ist ein Programm auf einer 16 Bit CPU nicht doppelt so schnell, weil ein 
Programm ja nicht nur aus 16 Bit Operationen besteht, sondern aus einem 
gesunden Mix aus Operationen, die nicht nur Arithmetik umfassen.
Was natürlich nicht heisst, dass man einer 8 Bit CPU sinnloserweise 16 
Bit Arithmetik aufhalst, wenn es nicht notwendig ist. Mache ich 
Zeitberechnnungen mit Stunden, Minuten und Sekunden, dann weiss ich im 
Vorfeld schon, dass ich den Zahlenbereich 0 bis 60 nicht verlassen 
werde. Also werde ich da keine 16-Bit int benutzen sondern nur 8 Bit 
Datentypen, um die 8 Bit CPU von der 16 Bit Arithmetik zu befreien.

von Steffen R. (steffen_rose)


Lesenswert?

Ich glaub, die Zuordnung einer CPU zu einer bestimmten Gruppe ist schon 
etwas komplexer als dargestellt wird. Häufig kann man eine CPU bei 
Betrachtung unterschiedlicher Eigenschaften (Registerbreite, Datenbus 
u.ä.) unterschiedlich einordnen. Deshalb auch mehrfach der Hinweis die 
Architektur als Gesamtheit zu betrachten.

Rolf Magnus schrieb:
>> Ohne den Thumb-Befehlssatz (der die Codedichte enorm zunehmen lassen hat)
>
> Ist das wirklich so extrem? Ich habe den Unterschied noch nie in der
> Praxis angeschaut, aber soweit ich weiß, braucht man bei Thumb mehr
> Instruktionen, die dafür aber jeweils halb so groß sind. Also
> Platzersparnis < 50%, dafür mehr Rechenzeit.

Dafür kann man 2 Thumb Befehle gleichzeitig aus dem Flash laden, der 
wiederrum bei höherer Taktrate mit Waitstate arbeitet.

von Steffen R. (steffen_rose)


Lesenswert?

Heizer schrieb:
> Mann müsste zusätzlich in den Architekutr sich
> reinschnupper.

Und man muß natürlich auch die Aufgabe betrachten, die es zu erledigen 
gilt.

von Karl H. (kbuchegg)


Lesenswert?

Heizer schrieb:

> Das heist also dass allein Bit Zahl und Frequenz/Takt Angaben nicht
> ausreichen um eine Aussage zu treffen, ob jene µC schneller ist oder
> langsammer.

genau

> Mann müsste zusätzlich in den Architekutr sich
> reinschnupper.

Da gibt es noch viele andere Faktoren, wie zb. Pipelining oder Caching.
Pipeling beschreibt ob in einer CPU zb gleichzeitig mehrere Befehle 'in 
Arbeit' sind.
Caching beschreibt, ob die CPU wirklich jedesmall in den langsameren 
Hauptspeicher gehen muss um sich von dort Werte zu holen oder zu 
speichern oder ob es da einen zwischengeschalteten schnellen Speicher 
gibt, über den die Operation läuft.

> Aber nicht destotrotzt sind es doch signifikante Angaben oder?

Ja, aber es sind nicht die einzigen. Man kann über Bitbreite und 
Taktfrequenz durchaus eine Tendenz definieren, aber im Einzelfall können 
die Ergebnisse davon auch signifikant abweichen.

Du machst ja ein Kraftfahrzeug auch nicht nur an der Anzahl der 
Sitzplätze und der PS fest.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Sonst kann man es nicht vergleichen.

Genau darauf wollte ich hinaus.  Es wird eben gern rein nach diesen
Schlagworten verglichen, aber die Bus- und Registerbreite ist eben
nur ein kleiner Teil der Gesamtperformance.

von Pandur S. (jetztnicht)


Lesenswert?

Was zB auch einen grossen Einfluss hat, ist, ob ein Indexregister 
vorhanden ist, oder mehrere gleichwertige.
Deswegen haengt man die Entscheidung fuer eine Familie nicht an 
irgendwelchen von Marketing Leuten erdachten Schlagworten auf, sondern 
an :

-Variation der Features ueber die Familie
-Skalierbarkeit ueber die Familie
-Lagerhaltung, bei sich, und beim Lieferanten
-Zuverlaessigkeit der Lieferkette
-Tools
-Support, zB  von Kollegen
-Preisgestaltung
-Stueckzahlen

von oldmax (Gast)


Lesenswert?

Hi
Lasst mich auch mal en wenig klugsch...

Maik S. schrieb:
> Und 16 Bit = 2^16 Möglichkeiten (nicht 16^2)
16 Bit ist 2^16-1 weil angefangen wird mit 0. Bei 2^16 brauchts für eine 
Verarbeitung in einem Rutsch schon den 32 bitter...

Heizer schrieb:
> Aber was ich hier nicht verstehe ist, wie das im Code zu verstehen ist.
> Wenn ich z.B mit ein 8-Bit µC in einer Weil-Schleife ein wert x immer
> mit 2 Addiere:

Mach dir doch mal den Spaß, und addiere binär. Du weißt, das eine binäre 
Zahl nicht größer sein´kann als 1. Wie im Dezimalsystem, wenn dein 
Ergebnis >9 wird und du einen Übertrag in die nächste Dekade hast, 
geschieht das bei Binärzahlen schon, wenn eine Zahl >1 wird.
Also 1 + 1 = 10, bei Binäraddition versteht sich. Nun nimmst du die 
maximal größte darstellbare Zahl mit 8 Bits, nein das ist nicht 256, 
sondern eben wegen der mitzurechnenden 0 nur 255, und addierst 1 dazu.
             11111111   oder        11111111
          +         1            +  00000001
          = 100000000            = 100000000
Dazu rechnest du wie du gelernt hast, nur im Binärsystem. Du siehst, 8 
Bit reichen nicht mehr. Mit einzelnen bits schlagen wir uns aber bei 
Speicherzugriffen nicht herum und deshalb wird einkomplett zweites Byte 
für das Ergebnis benötigt. Da man immer schneller werden möchte und auch 
eine höhere Dichte bei den Chipherstellern entwickelt wurde, sind die 
Datenbreiten von acht bit auf bis zu 68 Bit angewachsen. Vielleicht gibt 
es aber auch schon 128 bitter, wer weiß.
Gruß oldmax

von Nil (nilsnilss)


Lesenswert?

oldmax schrieb:
> sind die Datenbreiten von acht bit auf bis zu 68 Bit angewachsen

Wenn schon klugscheißen, dann bitte richtig: sind wohl eher 64 Bit.

von Maik S. (yellowbird)


Lesenswert?

oldmax schrieb:
> Hi
> Lasst mich auch mal en wenig klugsch...
>
> Maik S. schrieb:
>> Und 16 Bit = 2^16 Möglichkeiten (nicht 16^2)
> 16 Bit ist 2^16-1 weil angefangen wird mit 0. Bei 2^16 brauchts für eine
> Verarbeitung in einem Rutsch schon den 32 bitter...

2^16 Möglichkeiten ist korrekt.
Die Null ist die erste Möglichkeit.... 0 != null

von Rolf Magnus (Gast)


Lesenswert?

Heizer schrieb:
> Das heist also dass allein Bit Zahl und Frequenz/Takt Angaben nicht
> ausreichen um eine Aussage zu treffen, ob jene µC schneller ist oder
> langsammer. Mann müsste zusätzlich in den Architekutr sich
> reinschnupper.

Wenn du bei einem Auto weißt, wieviel PS der Motor hat und wieviele 
Zylinder, bedeutet das auch nicht, daß du deshalb weißt, wie schnell es 
fährt. Da gibt's dann doch noch zwei oder drei Dinge mehr zu 
berücksichtigen, und so ist das beim Prozessor auch.

oldmax schrieb:
>> Und 16 Bit = 2^16 Möglichkeiten (nicht 16^2)
> 16 Bit ist 2^16-1 weil angefangen wird mit 0.

Und die ist unmöglich? Oder warum wird sie nicht mitgezählt?

> Heizer schrieb:
>> Aber was ich hier nicht verstehe ist, wie das im Code zu verstehen ist.
>> Wenn ich z.B mit ein 8-Bit µC in einer Weil-Schleife ein wert x immer
>> mit 2 Addiere:
>
> Mach dir doch mal den Spaß, und addiere binär. Du weißt, das eine binäre
> Zahl nicht größer sein´kann als 1. Wie im Dezimalsystem, wenn dein
> Ergebnis >9 wird und du einen Übertrag in die nächste Dekade hast,
> geschieht das bei Binärzahlen schon, wenn eine Zahl >1 wird.

Genau genommen sprichst du hier vom Dualsystem.

> Dazu rechnest du wie du gelernt hast, nur im Binärsystem. Du siehst, 8
> Bit reichen nicht mehr. Mit einzelnen bits schlagen wir uns aber bei
> Speicherzugriffen nicht herum und deshalb wird einkomplett zweites Byte
> für das Ergebnis benötigt.

Das zusätzliche Bit kommt zwar nicht in den Speicher, ist aber nach der 
Berechnung in Form des Übertrags durchaus da. Das nutzt man dann, damit 
man, genau wie man es in der Schule lernt, größere Zahlen mit Übertrag 
zusammenaddieren kann.

> Da man immer schneller werden möchte und auch eine höhere Dichte bei den
> Chipherstellern entwickelt wurde, sind die Datenbreiten von acht bit auf
> bis zu 68 Bit angewachsen. Vielleicht gibt es aber auch schon 128
> bitter, wer weiß.

Nun, irgendwann lohnt sich das nicht mehr, weil man so große 
Integerzahlen nur selten braucht. Und bei den Anwendungen, wo 64 Bit 
nicht reichen, sind meist auch 128 Bit zu wenig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.