Zahlen umwandeln in C

  • Hallo Leute,

    ich habe auf dem Gebiet noch etwas Schwierigkeiten.
    Habe zu 2 Programmen eine Frage.

    1.
    In der Aufgabenstellung steht, dass eine vorzeichenbehaftete Dezimalzahl eingelesen werden soll, in einer short Variablen gespeichert werden soll und das gespeicherte Bitmuster in hexadezimaler Form gemäß der vorzeichenlpsen Darstellung ausgegeben werden soll.
    Ist das so richtig?

    Ist das so richtig? Wenn ich die Variable "dezimal" mit short definiere, dann bekomme ich beim Programm einen Fehler nach der Eingabe.

    2.
    Wie sieht es aus, wenn ich eine Hexazahl eingeben will und mir dann die Dezimalzahl ausgegeben wird?
    ich probiere schon die ganze Zahl herum, aber nichts klappt.

    Vielen vielen Dank!!

  • scanf() erwartet einen Pointer auf ein Integer um an diese Speicherstelle ein int zu speichern. Hast du nur ein short ist einfach zu weniger Speicher reserviert, deswegen ein Speicherzugriffsfehler.
    Wenn du umgekehrt umrechnen willst, wirf einen Blick in die Manpage von scanf()/printf() - einfach d und x austauschen in den Funktionen...
    Allgemein sollte die Funktion main() den Rückgabewert int haben.

  • Wenn ich die Variable "dezimal" mit short definiere, dann bekomme ich beim Programm einen Fehler nach der Eingabe.


    Ich nicht. Es compiliert und funktioniert nach wie vor. Fehlermeldung mitliefern wäre schön!

    EDIT: gelbasack hat aber natürlich recht - man muss %hd verwenden, damit nicht über den short hinaus 2 Bytes beim Schreiben "vernichtet" werden.

    ad 2: Genau umgekehrt - oben %x, unten %d.

    Dipper dipper dii dipper dii dipper dii duuu

  • Danke euch für die schnellen Antworten!

    Wegen short fragte ich, weil in der Übungsaufgabe ja steht "in einer short Variablen speichern".
    Und ich frag mich warum die Aufgabenstellung zur Umrechnung hexa->dezimal so einfach da steht und bei dezimal->Hexa so "kompliziert", also:


    Die Fehlermeldung lautet wenn ich short dezimal definiere:
    Run-Time Check Failure #2-stack around the variable 'dezimal' was corrupted


    EDIT:
    Hier nochmal die genauen Aufgabenstellungen

    • Schreiben Sie ein Programm, das eine vorzeichenlose Hexadezimalzahl einliest und die gespeicherte Zahl in dezimaler Form ausgibt.
    • Schreiben Sie ein Programm, das eine vorzeichenbehaftete Dezimalzahl einliest, in einer short-Variablen speichert und das gespeicherte Bitmuster in hexadezimaler Form gemäß der vorzeichenlosen Darstellung ausgibt.
    • Konvertieren Sie die Dezimalzahl 47010 in das Hexadezimalsystem und bestimmen Sie die Zweierkomplement-Darstellung von -4510
    • Überprüfen Sie Ihre Ergebnisse mit dem Programm aus Aufgabe 6.2


    1. und 2. sind ja eigentlich gleich, nur dass da die Eingabe und Ausgabe vertauscht werden. Und wenn ich die Aufgabe 2 mit dem short Typ %hd programmiere und dann z.B. die Zahl 47010 gibt er FFFFb7a2 aus. Was soll das FFFF bedeuten? Denn eigentlich ist ja nur das b7a2 relevant und man könnte es mit einer normalen integer Variablen programmieren.

  • [*]Schreiben Sie ein Programm, das eine vorzeichenbehaftete Dezimalzahl einliest, in einer short-Variablen speichert und das gespeicherte Bitmuster in hexadezimaler Form gemäß der vorzeichenlosen Darstellung ausgibt.


    Das klingt aber danach, dass du zuerst eine Dezimalzahl einliest und die dann erst in einer short Variable speicherst (Datenverlust eingerechnet)? Evt. soll die Aufgabe ja das demonstrieren...

    Dipper dipper dii dipper dii dipper dii duuu

  • Sieht das dann so aus?

    In wie fern Datenverlust? Etwa, dass ein falsches Ergebnis raus kommt?

  • In wie fern Datenverlust? Etwa, dass ein falsches Ergebnis raus kommt?


    Wenn du auf einem System, wo ein int größer als ein short ist, einen int in einen short umwandelst, verlierst du natürlich bei Zahlen, die in einem short nicht mehr darstellbar sind weil sie zu groß dafür sind, Informationen.

    Du kannst dir ja mal auf deinem System sizeof(int) und sizeof(short) ausgeben lassen.

    Das Programm sollte zuerst einen int dezimal abfragen, diesen Wert dann in einer short-Variable speichern und dann in Hex ausgeben. So hätt ich das verstanden.

    Dipper dipper dii dipper dii dipper dii duuu

  • Danke für die Hilfen nochmal!
    Also das Programm wie ich es zuletzt hier geschrieben habe, hat ihm ausgereicht. Er meinte so ist das ok.

    Vielen Dank nochmal!!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!