tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
331
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Apr 2004
    Ort
    Kleinwallstadt --> Aschaffenburg --> Frankfurt
    Beiträge
    238
    Liebe Community,

    habe ein Prooblem mit einer geschrieben Funktion. Ich soll als Eingabe eine Dezimalzahl vorgeben und danach Binär ausgeben. Das habe ich soweit auch geschafft, nur habe ich nun das Problem, das ich immer 32 Nullen am Ende angezeigt bekomme und noch nicht verstanden habe warum...

    Ich weiß das es einfacher wäre mit einer rekursion mit dem Teiler von 2, aber das dürfen wir nicht verwenden. Lediglich Bit-Schiebe-Operationen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void){
        unsigned long long eingabe;
        unsigned long long schalter = 0;
        const unsigned long long maxnum = 0x00 - 1;
     
        printf("Bitte geben Sie eine ganze Dezimalzahl zwischen 0 und %llu ein:\n", maxnum);
     
        if (!scanf("%llu", &eingabe)) {
                printf("Fehler beim Lesen der Eingabe");
                return EXIT_FAILURE;
        }
     
        while(eingabe) {
            if ((schalter == 0) && (eingabe & 0x80000000)) {
                schalter = 1;
            }
            if (schalter == 1) {
                if (eingabe & 0x80000000) {
                    printf("1");
                }
                else {
                    printf("0");
                }
            }
            eingabe = eingabe << 1;
        }
     
        if (schalter == 0) {
            printf("0");
        }
        printf("\n");
     
        return EXIT_SUCCESS;
    }

    Mit freundlichen Grüßen,
    Hawkster
     
    Das Softwarebusiness ist Binär, du bist eine 1 oder eine 0 - Lebendig oder Tod...

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    Kein Fehler, aber das 0x00 bei maxnum kannst du weglassen. Nur -1.
    Bei scanf würde ich auf die 11 bei %11u verzichten.
    Statt "eingabe = eingabe << 1;" geht auch "eingabe <<= 1;".

    Hauptproblem:
    Was ist denn, wenn du vor "while(eingabe)"
    ein "printf("%d",sizeof(eingabe));" machst?
    Wird 4 oder 8 ausgegeben?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?