matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenSoftwaretechnik und ProgrammierungDeklaration mit Wertzuweisung
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Softwaretechnik und Programmierung" - Deklaration mit Wertzuweisung
Deklaration mit Wertzuweisung < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Deklaration mit Wertzuweisung: Wie gehe ich da vor?
Status: (Frage) beantwortet Status 
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

        
Bezug
Deklaration mit Wertzuweisung: Antwort
Status: (Antwort) fertig Status 
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).

    



Bezug
                
Bezug
Deklaration mit Wertzuweisung: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
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

Bezug
        
Bezug
Deklaration mit Wertzuweisung: Antwort
Status: (Antwort) fertig Status 
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.






Bezug
                
Bezug
Deklaration mit Wertzuweisung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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....

Bezug
                        
Bezug
Deklaration mit Wertzuweisung: Antwort
Status: (Antwort) fertig Status 
Datum: 21:43 So 20.11.2011
Autor: Event_Horizon

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)




Bezug
                                
Bezug
Deklaration mit Wertzuweisung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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...

Bezug
                                        
Bezug
Deklaration mit Wertzuweisung: Antwort
Status: (Antwort) fertig Status 
Datum: 22:21 So 20.11.2011
Autor: Event_Horizon

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.


Bezug
                                                
Bezug
Deklaration mit Wertzuweisung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:54 So 20.11.2011
Autor: steftn

Danke!

Da wär ich ja nie drauf gekommen :-)

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]