2017-02-23 10 views
0

与えられた整数の2進数を返す関数を作成しようとしています。私のC関数が正しいint-to-binary値を返さない

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

1234 1421075418 
315904 1826920960 

所定の値と左シフト値が正確であるが、バイナリ等価物:1234のテスト入力が与えられたとき、それは与えられた入力の両方のバイナリと左シフトされたバージョンのバイナリの誤った値を返しますそうではありません。

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

[printfを使用してバイナリ番号を印刷する方法](0120-18753)をご覧ください。 – jdigital

+0

実際の出力を表示しました。予想される*出力は何ですか? 'ショービット'とは何でしょうか?デバッガを使ってコードをステップ実行しようとしたことがあります(例えば、 'showbits'の単一行を複数の行に分割し、一時変数を使用するなどして、コードを簡潔にするのに役立ちます)。 –

+0

あなたは、指定された整数に対してバイナリで表示することを意味しますか?これは[Cを使ってバイナリ表現でintを出力する]の複製です(http://stackoverflow.com/questions/1024389/print-an-int-in-binary-representation-using-c) –

答えて

1

1234のバイナリは、あなたのマシン上で整数の変数に格納することはできません10011010010ですので。戻り値の型をshowbits()に変更すると、動作する可能性があります。しかし、これはバイナリ値を得る永続的な解決策ではありません。

関連する問題