Deklaration mit Wertzuweisung < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:39 So 20.11.2011 | Autor: | steftn |
Aufgabe | Aufgabenstellung:
Weisen Sie i einen ganzzahligen Wert zu, dessen 4 Bytes die Werte 4, 3, 2, 1 haben.
Das Byte mit dem höchsten Stellenwert soll den Wert 4 haben, usw. bis zum Byte
mit dem niedrigsten Stellenwert das den Wert 1 haben soll. Benutzen Sie auf der
rechten Seite der Wertzuweisung eine Literalkonstante, die hexadezimal angegeben
ist! |
Hallo,
ich habe bei der oben genannten Aufgabe ein Problem, ich weiß nicht wie das aussehen soll, so vielleicht:
int werte [] = {1,2,3,4};
i = werte;
Aber wie mache ich das jetzt mit der hexadezimalen Literalkonstante auf der rechten Seite? Versteh ich irgendwie nicht....
Vielleicht kann mir jeman einen Tipp geben.
Danke
EDIT: Programmiersprache ist C
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:31 So 20.11.2011 | Autor: | uhelp |
Es wäre sinnvoll die Programmiersprache anzugeben.
Die Syntaxkonstrukte, die du verwendet hast, sind bei vielen zu finden.
Ein HexLiteral hat meist die Form xZZZZ...
wobei das "x" dem Compiler/Interpreter mitteilt, dass nun eine Hexzahl folgt. Das "Z" stellt eine hexadezimale Ziffer dar (also ein Zeichen vvon 0 bis 9 und A-F) und die Punkte deuten an, dass es noch sehr viel mehr Stellen sein können.
Wollen wir nun einer Integer Variablen 4 Bytes zuweisen,
so müssen wir sie so definieren, dass sie auch 4 Bytes hat.
Das hängt nicht nur von der Hardware ab, sondern auch von so mancher Einstellung und natürlich der verwendeten Programmiersprache ab.
Oft ist ein Long int 4 Bytes. Muss aber nicht.
Die Doku wird dir das offenbaren, oder ein kleines Testprogramm mit
einer Anweisung wie: len(int) oder len(long)
Eine vier in hexadezimaler Schreibweise ist x4,
x3 die 3, x2 die zwei, und x1 die eins.
Damit lautet die Lösung:
x4321
Wie gesagt: Würdest du angeben, mit was du programmierst, könnte man auch präzise antworten.
Da die meisten Rechner heute aber 2 Bytes für int und 4 für long Werte verwenden,
sollte die vollständige Lösung lauten:
long i;
i = [mm] \\x4321;
[/mm]
Da der Backslash und das x nicht korrekt dargestellt werden, hier in Worten nochmal die letzte Zeile:
i = Backslash x4321
(ohne das Leerzeichen zwischen dem Backslash und x).
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 16:22 So 20.11.2011 | Autor: | steftn |
hallo,
ich habs oben editiert, die Programmiersprache ist C.
Also müsste die Lösung dann so heißen?:
int werte = 0x1234;
i = werte;
mfg
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:59 So 20.11.2011 | Autor: | uhelp |
Genau, wie geschrieben:
ZielVariableIntLong = 0x4321
Rechts der Zuweisung steht nun die Literalkonstante 0x4321
Links davon die Variable.
(So ich mich recht entsinne, ist in C diese Schreibweise ( 0xZZZ zulässig.)
Ich denke du scheiterst an dem Begriff "Literalkonstante".
Was verständlich ist, ist der Begriff doch leicht irreführend.
Ein Literal, also eine Zeichenkette, die NICHT in einer Variablen steht, ist immer eine Konstante, aus Sicht des Compilerbauers. Nur ist sie eben nicht über einen Namen erreichbar im Unterschied zu einer "benannten Konstanten".
(Komplilierst und linkst du das Programm, steht im dann vorliegenden Machinencode KEIN Verweis mehr auf diese Zeichenkette. Lediglich die Variable ist noch erreichbar.)
Und dass eine Literalkonstante / Konstante nicht links stehen kann, versteht sich von selbst:
Der LValue (also, was links einer Zuweisung steht) kann keine Konstante sein. Eine Zuweisung wäre ja eine Änderung, was alleine schon der Definition widerspricht. Und selbst wenn du denselben Wert zuweisen wolltest, wäre eine Zuweisung immer noch eine Änderung.
Also können Literalkonstanten und Konstanten immer nur RValues sein (also rechts der Zuweisung) stehen.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:34 So 20.11.2011 | Autor: | steftn |
mhm, ich habs jetzt so gemacht:
int long = wert;
wert = 0x4321;
i = wert;
Aber leider stimmt da wohl etwas nicht. Ich muss nämlich diese Angabe in ein großes Programm einfügen und es kommt nicht das richtige raus. Hier mal die Teilaufgabenstellung:
Klick mich
mhm... irgendwas stimmt an den 0x4321 wohl nicht, weil wenn ich das so schreibe: 0x432101 kommt das richtige raus....
|
|
|
|
|
Hallo!
Das int besteht aus VIER byte, und jedes byte läßt sich mit zwei HEX-Ziffern angeben. Es heißt daher:
0x04030201
(Die Farben zeigen die einzelnen Bytes)
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:56 So 20.11.2011 | Autor: | steftn |
wow, danke, jetzt funktioniert es!
Aber leider hab ich das jetzt noch nicht ganz verstanden.
1 Byte sind doch 8 Bits?
Wo sind dann die 8 Bits wenn die Zahl z.b. 0x04 ist?
So vielleicht????
00
01
10
11
puh, keine Ahnung...
|
|
|
|
|
Hallo!
Das ist eine Eigenart der hexadezimalen Darstellung von Bytes.
Ein Byte kann man in ein oberes und ein unteres so genanntes "Nibble" von 4 Bit aufteilen. Jede der beiden Ziffern der HEX-Darstellung gibt dann ein Nibble wieder. Denn mit 4 Bit kann man grade 16 Zustände, also 0-F darstellen.
Schaumal:
0000 1111 = 0x0F
1111 0000 = 0xF0
0010 1000 = 0x28
0000 0100 = 0x04
0000 0010 = 0x02
Du siehst, mit dem Trick kann man sehr schnell beliebig lange binäre Zahlen in hexadezimale un umgekehrt umwandeln.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:54 So 20.11.2011 | Autor: | steftn |
Danke!
Da wär ich ja nie drauf gekommen
|
|
|
|