Hallo!
Wie schon im Betreff zu lesen: Kann man eine Konstante in C verändern?
Evtl. mit Tricks oder so?
Ich persönlich will sowas nicht machen, habe aber bald Prüfung in
Programmieren und eine Frage könnte so lauten.
Danke schon mal im Voraus!
sucheRAT schrieb:> Kann man eine Konstante in C verändern?
manchmal ja, manchmal nein. Wenn sie normal const ist und im RAM liegt
könnte man das const wegcasten. Aber es kann genauso sein, das die
Variable vom Compiler komplett eingespart wird oder das sie in einem
ReadOnly Speicher liegt. Dann kannst du sie nicht ändern.
Hallo!
Danke für die schnelle Antwort!
Das heißt, wenn ich schreibe:
1
constlongvar=3;
2
3
(long)var=1;
dann ist var=1?
Lassen das die Compiler so zu? Oder nur manche?
var bleibt aber noch eine Konstante oder?
Du schreibst:
>Aber es kann genauso sein, das die>Variable vom Compiler komplett eingespart wird oder das sie in einem>ReadOnly Speicher liegt. Dann kannst du sie nicht ändern.
Gilt das auch für normale PCs? (Also keine uC oder so)
Peter II schrieb:> sucheRAT schrieb:>> Kann man eine Konstante in C verändern?>> manchmal ja, manchmal nein. Wenn sie normal const ist und im RAM liegt> könnte man das const wegcasten.
Prima Tipp, voll der Griff ins Klo. C99 6.7.3 §5:
1
If an attempt is made to modify an object defined with
2
a const-qualified type through use of an lvalue with
3
non-const-qualified type, the behavior is undefined.
Johann L. schrieb:> Prima Tipp, voll der Griff ins Klo:
mir ist selber klar, das man es nicht machen sollte, er wollte wissen ob
es geht. Und ja es gibt Möglichkeiten auch const Variablen zu ändern.
sucheRAT schrieb:> Das heißt, wenn ich schreibe:> const long var=3;>> (long)var=1;>> dann ist var=1?> Lassen das die Compiler so zu? Oder nur manche?
Nein, das geht nicht. Das geht:
void main(void)
{
const long var=3;
long *ptr;
ptr = (long *) &var;
*ptr = 1;
}
Hallo,
was lernen Programmierer die Konstanten benutzen und diese dann zur
Laufzeit verändern wollen??? Vielleicht wie sie Variablen anlegen die
sich nicht verändern lassen...
Wenn ich eine Konstante brauche nehme ich sie und will diese ebend nicht
verändern. Wenn ich was verändern will nehm ich halt eine Variabel.
Oder macht man das bei esoterischem Programmieren... das ist wie
Namentanzen. Da muss ich mein Unverständnis zum Ausdruck bringen.
Also warum, wozu...
Grüße aus Berlin
sucheRAT schrieb:> Könntest du den Schritt "ptr = (long *) &var;" bitte erklären?
wenn du das nicht versteht, dann solltest du doch Lieber Pointer lernen
als fragen wie "kann man const ändern".
Rene Schube schrieb:> Da muss ich mein Unverständnis zum Ausdruck bringen.
Du bringst Dein Unverständnis zum Ausdruck -- hättest Du aber bleiben
lassen können.
So unsinnig ist die Frage ja nicht, da man in C vieles hinbiegen kann,
und insbesondere, da auf eine mögliche Prüfungsfrage verwiesen wurde.
Na ja, immerhin habe ich gelernt, dass es den Herrn Johann L. hier
wieder gibt, von dem hatte ich vor Jahren mal etwas kluges gelesen.
Konstanten residieren im ROM. Sie sind in klassischen Systemen nicht
änderbar(weil in EPROMs). In Atmel µControllern gibt es allerdings die
Möglichkeit, den Flash-Speicher (entspricht dem ROM) im laufenden
BNetrieb zu ändern. Es geht also. Die Frage ist nur, wie oft willst du
das machen? Das Datenblatt gibt 10.000 Schreibzyklen für den Flash an.
Es würde höchstens für Korrekturen von Parametern gehen, die sich im
Langzeitbetrieb ändern.
klausr schrieb:> sucheRAT schrieb:>> Das heißt, wenn ich schreibe:>> const long var=3;>>>> (long)var=1;>>>> dann ist var=1?>> Lassen das die Compiler so zu? Oder nur manche?>> Nein, das geht nicht. Das geht:>> void main(void)> {> const long var=3;> long *ptr;> ptr = (long *) &var;> *ptr = 1;> }
So einfach gehts dann wohl doch nicht.
int main(int argc, char* argv[])
{
const int a=100;
int * p;
p = (int *) &a;
*p = 1;
printf("%i\n",a);
printf("Hello World!\n");
return 0;
}
Wenn man das in MS-C++ mit dem Debugger Zeile für Zeile ausführt, dann
wird zwar nach Ausführen von *p=1 im Debugger a=1 angezeigt, aber
printf("%i\n",a) druckt weiterhin 100 für a aus.
Der Compiler hat also bereits beim Kompilieren die Konstanten an
verschiedenen Stellen bereits eingetragen.
@Peter II:
Bei Zeigern kenne ich mich eh aus, ich verstehe nur den genannten
Ausdruck nicht.
Es macht ja im Normalfall keinen Sinn, einen Zeiger auf Konstante zu
definieren.
Normal würde man schreiben:
long var;
long *ptr;
ptr= &var;
Und wenn man einem Zeiger einen anderen Zeiger zuweist, schreibt man:
ptr1=ptr2;
Wenn die Typen unterschiedlich sind (geht das überhaupt??) würde man
vermutlich schreiben müssen:
long *ptr1;
int *ptr2;
ptr1=(long *)ptr2;
Den Code "ptr = (long *) &var;" verstehe ich aber nicht.
Deshalb wäre es nett, wenn du ihn mir erklären würdest.
Und nochmal: Ich will sowas nicht machen. Aber mein Professor will
vielleicht bei meiner Prüfung von mir wissen, wie es gehen KÖNNTE.
@Helmut:
Heißt das jetzt, es geht doch nicht? Oder hängt das vom Compiler/BS ab?
Wo geht´s? Wo nicht?
Peter II schrieb:> bei einem PC nicht. Dort liegen sie genauso im Ram wie normale> Variablen.
Ja klar, also wäre es doch einfach, den Offset dieser Konstanten im File
zu ermitteln, um dann beim beim nächsten Laden derselben deren Inhalt zu
ändern. Ich dachte, es ginge um eingebettete Systeme.
Salewski schrieb:> Rene Schube schrieb:>> Da muss ich mein Unverständnis zum Ausdruck bringen.>> Du bringst Dein Unverständnis zum Ausdruck -- hättest Du aber bleiben> lassen können.> So unsinnig ist die Frage ja nicht, da man in C vieles hinbiegen kann,> und insbesondere, da auf eine mögliche Prüfungsfrage verwiesen wurde.
Mein Unverständnis gilt für das warum! Das man in C alle möglichen
Schweinereien machen kann ist klar. Aber eine Konstante ist und bleibt
konstant sowie eine Variable ebend variabel ist. So ist es gut und es
gibt keinen Grund das zu ändern.
In einer Prüfung sollte auch nicht abgefragt werden wie man sich ins
Knie schiessen kann. Obwohl das ja der Sinn hinter C ist :)
Grüße
sucheRAT schrieb:> Es macht ja im Normalfall keinen Sinn, einen Zeiger auf Konstante zu> definieren.
und warum nicht. Warum sollte es kein Zeiger auf einen Konstanten String
geben?
const char* s = "adasdf";
Peter II schrieb:> und warum nicht. Warum sollte es kein Zeiger auf einen Konstanten String> geben?
Schlechtes Beispiel, denn:
Den kann man im occupierten Specherbereich suchen. Such mal nach einer
unreferenzierten 64-bit Realzahl.
Rene Schube schrieb:> In einer Prüfung sollte auch nicht abgefragt werden wie man sich ins> Knie schiessen kann.
Warum nicht? Eigentlich sogar mit recht -- man sollte schon wissen was
einem mit C alles widerfahren kann.
Da hat man eine Konstante definiert, gibt sie dann später aus, und
wundert sich, weil man mit irgendwelchen wilden Zeigeroperationen
willkürlich im Speicher herumgewirbelt hat.
Aber vielleicht sollte doch jemand nochmal auf den Fragesteller
antworten, da ist scheinbar noch einiges unklar. Zeiger auf Konstanten
machen ja durchaus Sinn, was ihm wohl nicht so ganz klar ist. Ich werde
dazu aber nichts sagen, ich bin kein C Experte, das Beispiel von Helmut
S. hätte ich nicht unbedingt erwartet.
Nochmals:
- Ich weiß, was ein Zeiger ist.
- Ich weiß, was ein cast ist.
- Ich weiß, was eine Konstante ist.
Was ich nicht weiß, ist, was genau dieser Befehl macht:
ptr = (long *) &var;
Also diese Kombination von cast und Zuweisung.
So wäre es mir logisch:
ptr=&var;
Die Adresse der Konstanten wird einem Zeiger zugewiesen.
Meine Frage ist nun, warum das so nicht geht, also warum man die Adresse
noch zu einem long-Zeiger casten muss.
sucheRAT schrieb:> Meine Frage ist nun, warum das so nicht geht, also warum man die Adresse> noch zu einem long-Zeiger casten muss.
OK,
wenn Du nur ein const hast macht der Compiler idR dasselbe wie mit
#define also er schreibt den Wert direkt ins Compilat.
Nimmst Du nun einen Pointer auf die Konstante muß der Compiler das
dynamisch erledigen weil er ja weiß das da etwas darauf zeigt.
Und nun überlege mal warum man nun einen expliziten cast braucht ...
Helmut S. schrieb:> Der Compiler hat also bereits beim Kompilieren die Konstanten an> verschiedenen Stellen bereits eingetragen.
Genauer, der preprocessor nimmt die Ersetzung im Quelltext vor und der
Compiler sieht nur die Zahl.
Der inderekte Weg (Umweg) über pointer geht natürlich nur im RAM. Genau
so kann man auch den Code zur Laufzeit verändern, aber nur im RAM.
Johann L. schrieb:> Peter II schrieb:>> sucheRAT schrieb:>>> Kann man eine Konstante in C verändern?>>>> manchmal ja, manchmal nein. Wenn sie normal const ist und im RAM liegt>> könnte man das const wegcasten.>> Prima Tipp, voll der Griff ins Klo. C99 6.7.3 §5:>>
1
> If an attempt is made to modify an object defined with
2
> a const-qualified type through use of an lvalue with
3
> non-const-qualified type, the behavior is undefined.
Genau das, und nichts anderes ist die richtige Antwort. Sag dem Prof,
das es gegen die Spezifikationen verstößt; aber je nach Compiler
natürlich möglich sein könnte.
Ein Prof der nicht-spezifiziertes Programmieren unterstützt sollte es
nicht geben.
RamRam schrieb:> Genauer, der preprocessor nimmt die Ersetzung im Quelltext vor und der> Compiler sieht nur die Zahl.
Also ist dann 3 keine "konstante long Variable" sondern nur mehr "3" und
es muss zu einer Variable gecastet werden.
Warum dann nicht:
ptr=&((long)var);
???
Bin jetzt total verwirrt....
RamRam schrieb:> Genauer, der preprocessor nimmt die Ersetzung im Quelltext vor und der> Compiler sieht nur die Zahl.
Na??? Ich würde nicht erwarten, dass der Preprocessor das macht.
Beim Schreiben auf eine Konstante haut Dir der Compiler eine
Fehlermeldung um die Ohren.
Mit einem Cast sagst Du dem Compiler: "Ich weiß es besser als Du,
schalte mal Deine Fehlererkennung ab".
Ein Cast ohne Sinn und Verstand ist also kein Programmiertrick, sondern
schlichtweg Unsinn.
Wenn Du also sagst, mit einem Cast geht es, würde ich Dir als Prüfer
eine glatte 6- geben.
sucheRAT schrieb:> @Peter II:> ....>> @Helmut:>> Heißt das jetzt, es geht doch nicht? Oder hängt das vom Compiler/BS ab?> Wo geht´s? Wo nicht?
Die bisher vorgeschlagen Lösung funktioniert nicht mit MS-C++. Dieser
Compiler ist so "schlau" und trägt überall im Programm an den Stellen in
denen die Konstante als Wert verwendet wird deren Wert ein, also nicht
den Verweis auf die const-Variable. Vielleicht könnte ja mal jemand das
mit dem GCC testen. Im Moment phantasieren hier doch eine Menge Leute
ohne es je probiert zu haben.
Helmut
sucheRAT schrieb:>> Genauer, der preprocessor nimmt die Ersetzung im Quelltext vor und der>> Compiler sieht nur die Zahl.
Bei #define ja, bei const nicht.
> Also ist dann 3 keine "konstante long Variable" sondern nur mehr "3"
Nein. Eine const ist dort nicht verwendbar, wo der Compiler einen
konstanten Ausdruck erwartet. Anders in C++.
Helmut S. schrieb:> So einfach gehts dann wohl doch nicht.
Naja, das, was wir hier treiben, ist auch undefined behavior. Der
gcc-4.6.3 x86 gibt brav "3" und "1" aus, ob mit oder ohne Optimierung,
wenn ich bei meinem Code printfs einfüge.
Wichtig: Das es irgendwie "geht", heißt nicht, dass das legaler Code
ist!
Habe es gerade probiert:
int main()
{
const long a=3;
long *ptr;
ptr=&a;
*ptr=1;
printf("a= %ld\n",a);
return 0;
}
funktioniert auch. Es kommt 1 am Bildschirm bei der Ausgabe.
Es gibt natürlich auch eine Warnung.
Bei der Lösung von Peter II gibt´s dann auch keine Warnung.
Ich verwende CodeBlocks unter Linux mit dem Compiler GCC.
RamRam schrieb:> Genauer, der preprocessor nimmt die Ersetzung im Quelltext vor und der> Compiler sieht nur die Zahl.
Es erstaunt mich immer wieder, welche phantastischen Fähigkeiten dem
Präprozessor angedichtet werden.
klausr schrieb:> Jetzt wirds interessant. Der gleiche Quelltext, einmal als C und einmal> als C++ kompiliert, bringt unterschiedliche Ergebnisse!Klar. 7
Wenn du es mit einem Pascal-Compiler übersetzt, dann auch. C und C++
sind zwar ähnlich, aber nicht identisch. Und du hast exakt einen der
Unterschiede gefunden.
In C++ ist const vergleichbare mit einer lexikalische Konstante. In C
nicht.
In C geht beispielsweise dies nicht:
const int N = 10;
static int a[N];
In C++ hingegen schon.
Peter II schrieb:> Helmut S. schrieb:>> Die bisher vorgeschlagen Lösung funktioniert nicht mit MS-C++.>> du musst es nur richtig machen:>> const int i = rand(5);>> // i ändern siehe oben>> printf("i=%d", i );>> hier kann er kaum etwas wegoptimieren.
Wenn der const i so wie oben rand() zugewiesen wird, dann funktioniert
es auch in MS-C++. Wer macht denn Konstanten mit rand()?
A. K. schrieb:> In C++ ist const vergleichbar mit einer lexikalische Konstante.
Um keine Haarspalter auf den Plan zu rufen: Es ist nicht damit
identisch. Nur ist eben in C++ eine const auch dort verwendbar, wo die
Sprache einen konstanten Ausdruck verlangt. In C nicht.
Helmut S. schrieb:> Wer macht denn Konstanten mit rand()
Keiner, denn es handelt sich um eine initialisierte Variable, die als
const deklariert wird. Es wird Speicher (RAM) verwendet und die
Initialisierung erfolgt erst zu Laufzeit.
Bei direkter Angabe einer Zahl wird beim Übersetzen optimiert und direkt
die Zahl eingesetzt.
RamRam schrieb:> Bei direkter Angabe einer Zahl wird beim Übersetzen optimiert und direkt> die Zahl eingesetzt.
Ein C Compiler kann das machen, muss es aber nicht.
A. K. schrieb:> Ein C Compiler kann das machen, muss es aber nicht.
Jaaaaaaaaaaaaa!!! Aber bei einer initialisierten Variable kann er es
noch nicht einmal!
RamRam schrieb:> Jaaaaaaaaaaaaa!!! Aber bei einer initialisierten Variable kann er es> noch nicht einmal!
Doch, manchmal schon. ;-)
Wenn er weiss, dass sich der Wert nicht ändert.
RamRam schrieb:> Aber bei einer initialisierten Variable
Ok, bei einer zur Laufzeit initialisierten Variable ...
Offtopic:
Bitte weniger Klugsch.. und mehr zur Sache beitragen.
RamRam schrieb:> Ok, bei einer zur Laufzeit initialisierten Variable ...
Auch da darf er.
> Bitte weniger Klugsch.. und mehr zur Sache beitragen.
Das eigentliche Thema ist m.E. längst geklärt.
Salewski, Stefan schrieb:> Rene Schube schrieb:>> In einer Prüfung sollte auch nicht abgefragt werden wie man sich ins>> Knie schiessen kann.>> Warum nicht? Eigentlich sogar mit recht -- man sollte schon wissen was> einem mit C alles widerfahren kann.
Das Problem ist, daß es funktionieren kann_ aber nicht _muss. Es
können je nach Zielplattform, Compiler und dessen Parameter wie
Optimierung völlig unterschiedliche Dinge passieren. Ausprobieren ist
daher für die Beantwortung der Frage sinnlos, weil es keine
allgemeingültige Antwort gibt. Die korrekte Antwort auf die Frage wäre,
daß das Verhalten des Programms ab der Stelle (also nicht nur das
Verhalten der einen Zeile, sondern des kompletten restlichen
Programm-Ablaufs) undefiniert ist, wenn man es versucht.
> Ich persönlich will sowas nicht machen, habe aber bald Prüfung> in Programmieren und eine Frage könnte so lauten.
Das wäre dann eine Trickfrage.
Ungefähr so, wie in der Führerscheinprüfung:
Es ist nachts, 4 Uhr früh. Sie fahren über Land, weit und breit ist
nichts und sie kommen an eine mit einer Ampel geregelte Kreuzung. Die
Ampel zeigt in Ihrer Fahrtrichtung rot. Dürfen sie diese Ampel
überfahren, da es doch 4 Uhr früh ist, sie alle anderen Fahrtrichtungen
auf 5 Kilometer einsehen können und sie sich sicher sind, dass von allen
anderen Fahrtrichtungen keine Fahrzeuge kommen?
Rolf Magnus schrieb:> Salewski, Stefan schrieb:>> Rene Schube schrieb:>>> In einer Prüfung sollte auch nicht abgefragt werden wie man sich ins>>> Knie schiessen kann.>>>> Warum nicht? Eigentlich sogar mit recht -- man sollte schon wissen was>> einem mit C alles widerfahren kann.>> Das Problem ist, daß es funktionieren kann_ aber nicht _muss. Es> können je nach Zielplattform, Compiler und dessen Parameter wie> Optimierung völlig unterschiedliche Dinge passieren. Ausprobieren ist> daher für die Beantwortung der Frage sinnlos, weil es keine> allgemeingültige Antwort gibt. Die korrekte Antwort auf die Frage wäre,> daß das Verhalten des Programms ab der Stelle (also nicht nur das> Verhalten der einen Zeile, sondern des kompletten restlichen> Programm-Ablaufs) undefiniert ist, wenn man es versucht.
Absolut richtig.
Es schadet aber auch nichts, wenn man ein paar typische mögliche
Fehlerbilder kennt. Denn die Umkehrung ist im allgemeinen in der Praxis
sehr viel schwieriger: Aus dem Fehlerbild zu erkennen, wo ein
potentielles Problem sitzen könnte.
Denn auch wenn das Verhalten undefiniert ist, und es theoretisch möglich
wäre, dass das Programm die Festplatte formatiert oder den 3. Weltkrieg
auslöst (zumindest wäre es aus C Sicht ein zulässiges
Programmverhalten), so sind es in der Praxis dann doch lediglich ein
paar typische Szenarien, die auftreten.
So lange im Hinterkopf behalten wird, dass es sich immer noch um einen
Fehler handelt, selbst wenn das Programmverhalten das erwartete ist, so
lange spricht m.M nach nicht viel dagegen, da mal ein paar Versuche zu
starten um zu sehen, was alles tatsächlich passieren kann.
Salewski schrieb:> da auf eine mögliche Prüfungsfrage verwiesen wurde.
Sollte das ja wohl irgendwo mal behandelt worden sein... und dann sollte
man das in den Lernunterlagen nachschlagen und die Frage ggf. in dem
Konkretem Kontext stellen. 7 ist auch eine Konstante und mancher
bezeichnet auch ein Define als Konstante... "const" wurde ja erst von
den Antwortenden in den Raum geworfen.
Läubi .. schrieb:> 7 ist auch eine Konstante und mancher> bezeichnet auch ein Define als Konstante... "const" wurde ja erst von> den Antwortenden in den Raum geworfen.
Also: die Frage wörtlich nehmen:
sucheRAT schrieb:> Kann man eine Konstante in C verändern?
Antwort:
Ja.
Am einfachsten, indem man mit dem Editor einen anderen Wert in den
Sourcecode schreibt.
("zur Laufzeit" o.Ä. ist ja nicht gefordert)
Εrnst B✶ schrieb:> sucheRAT schrieb:>> Kann man eine Konstante in C verändern?>> Antwort:> Ja.> Am einfachsten, indem man mit dem Editor einen anderen Wert in den> Sourcecode schreibt.
Aber dann muss der Editor in C geschrieben sein! :-))))
>> Am einfachsten, indem man mit dem Editor einen anderen Wert in den>> Sourcecode schreibt.
In Anbetracht der Tatsache, dass es sich um eine potentielle
Prüfungsfrage handelt, würde ich sogar genau diese Antwort forcieren ;)
Ralf
Da es eine Pruefungsfrage ist, gibt es nur eine richtige Antwort: Die,
die der Pruefer erwartet.
Es ist leider so, dass Lehrkraefte auch bis rauf an die Universitaeten
durch Halbwissen und Scheuklappendenken glaenzen. In meinem Studium habe
ich viele Professoren mit seltsamen Pruefungsfragen erlebt, aber nicht
einmal davon gehoert, dass es fuer C++ und andere Sprachen Standards
gibt.
Gaja schrieb:
> Da es eine Pruefungsfrage ist, gibt es nur eine richtige Antwort: Die,> die der Pruefer erwartet.
Das kann ich bestätigen. Bestes Beispiel war unsere Dozentin für
"Betrieblichekommunikation" (also deutsch):
In der Klausur sollten wir die Gliederung für einen Geschäftsbrief
aufschreiben. Als Hilfsmittel war der Duden erlaubt.
Also haben wir das Beispiel für einen Geschäftsbrief aus dem Duden
abgeschrieben, ist ja schließlich der Duden.
Und was soll man sagen? gab natürlich keine Punkte dafür, weil das was
im Duden stand, anders war, als das was wir im Unterricht hatten.
Fazit:
Selbst wenn es im Duden bzw. in Fachbüchern steht ist es falsch, wenn
die Lehrkraft anderer Meinung ist!
Und für sowas gibt es leider Beispiele wie Sand am Meer.
Läubi .. schrieb:> Sollte das ja wohl irgendwo mal behandelt worden sein... und dann sollte> man das in den Lernunterlagen nachschlagen und die Frage ggf. in dem> Konkretem Kontext stellen. 7 ist auch eine Konstante und mancher> bezeichnet auch ein Define als Konstante... "const" wurde ja erst von> den Antwortenden in den Raum geworfen.
Im Kontext von ISO C ist von den dreien nur 7 eine Konstante.
Εrnst B✶ schrieb:> Also: die Frage wörtlich nehmen:>> sucheRAT schrieb:>> Kann man eine Konstante in C verändern?>> Antwort:> Ja.> Am einfachsten, indem man mit dem Editor einen anderen Wert in den> Sourcecode schreibt.
Dann hat man es aber nicht in C geändert, sondern im Editor. Man müßte
dann vielleicht ein C-Programm schreiben, das den Quellcode entsprechend
ändert.
Gaja schrieb:> Es ist leider so, dass Lehrkraefte auch bis rauf an die Universitaeten> durch Halbwissen und Scheuklappendenken glaenzen. In meinem Studium habe> ich viele Professoren mit seltsamen Pruefungsfragen erlebt, aber nicht> einmal davon gehoert, dass es fuer C++ und andere Sprachen Standards> gibt.
Viele haben auch noch nicht gehört, daß es nicht nur Standards, sondern
sogar Normen gibt ;-)
Mein Prof hat damals immerhin gleich in der ersten Vorlesung gesagt, daß
bei ihm "ANSI C" auf dem Programm steht. Es war halt nur leider keins.
Insofern bringt's halt auch nix, wenn er zwar weiß, daß es das gibt,
aber leider nicht, was drin steht.
Naja, mein Digitaltechnik-Prof hat auch ganz überzeugt erzählt, daß man
beim x86 geschickterweise genau ein Byte als kleinste adressierbare
Einheit gewählt hat. Nunja, kein Wunder, wenn man bedenkt, wie der
Begriff "Byte" definiert ist.