2017-02-23 6 views
0

Ich versuche eine Funktion zu erstellen, die das binäre Äquivalent einer bestimmten Ganzzahl zurückgibt. Aber wenn der Testeingang von 1234 gegeben, gibt sie den falschen Wert sowohl die gegebenen Eingabe der binären und die nach links verschobenen Version der binär:Meine C-Funktion gibt nicht den richtigen Int-zu-Binär-Wert zurück

Enter a base-10 integer: 1234 
Enter number of places to shift bit: 8 

1234 1421075418 
315904 1826920960 

Der angegebene Wert und links verschoben Wert ist korrekt, aber die binären Äquivalente sind nicht.

int showbits(int value) { 
    return (value == 0 || value == 1 ? value : ((value % 2) + 10 * showbits(value/2))); 
} 

void left_bit_shift() { 
    int value = get_single_base_10(); 
    int number_shift = get_number_shift(); 
    int bit_value = showbits(value); 

    int left_shifted_value = value << number_shift; 
    int left_shifted_bit = showbits(left_shifted_value); 

    printf("%d %d\n", value, bit_value); 
    printf("%d %d", left_shifted_value, left_shifted_bit); 
} 

int get_single_base_10() { 
    int value; 
    printf("Enter a base-10 integer: "); 
    scanf("%d", &value); 
    return value; 
} 

int get_number_shift() { 
    int shift; 
    printf("Enter number of places to shift bit: "); 
    scanf("%d", &shift); 
    return shift; 
} 
+0

Mögliches Duplikat von [Wie binäre Nummer über printf zu drucken] (http://stackoverflow.com/questions/6373093/how-to-print-binary-number-via-printf) – jdigital

+0

Sie haben uns die tatsächliche Ausgabe gezeigt , aber was ist die * erwartete * Ausgabe? Was sollen 'Showbits' tun? Haben Sie versucht, einen Debugger zu verwenden, um durch den Code zu gehen (wenn Sie das tun, hilft es, den Code lensse kurz zu machen, zum Beispiel indem Sie die "showbits" einzelne Zeile in mehrere Zeilen aufteilen und temporäre Variablen verwenden)? –

+0

Sie meinen, dass Sie für eine gegebene Ganzzahl im Binärformat anzeigen möchten? Dies ist ein Duplikat von [Ein int in binärer Darstellung mit C drucken] (http://stackoverflow.com/questions/1024389/print-an-int-in-binary-representation-using-c) –

Antwort

1

Da binäre von 123410011010010 ist, die sich nicht in einer Integer-Variablen auf Ihrem Rechner gespeichert werden. Wenn Sie den Rückgabetyp showbits() zu lang ändern, funktioniert es möglicherweise. Aber das ist keine dauerhafte Lösung, um Binärwerte zu erhalten.

Verwandte Themen