2017-02-23 21 views
0

Я пытаюсь создать функцию, которая возвращает двоичный эквивалент заданного целого. Но когда дается тестовый вход 1234, он возвращает неверное значение бинарных и левая смещенной версия бинарный как на данном входе в:Моя функция C не возвращает правильное значение int-to-binary

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

1234 1421075418 
315904 1826920960 

Приведенное значение и сдвинуты влево значение правильны, но двоичные эквиваленты нет.

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] (http://stackoverflow.com/questions/6373093/how-to-print-binary-number-via-printf) – jdigital

+0

Вы показали нам фактический результат , но что такое * ожидаемый вывод? Что должно делать «шоубиты»? Пробовали ли вы использовать отладчик для перехода по коду (когда вы это делаете, это помогает сделать код lense кратким, например, разбив одиночную строку 'showbits' на несколько строк и используя временные переменные)? –

+0

Вы хотите, чтобы вы отображались в двоичном формате для заданного целого числа? Это дубликат [Print int int в двоичном представлении с использованием C] (http://stackoverflow.com/questions/1024389/print-an-int-in-binary-representation-using-c) –

ответ

1

Поскольку двоичный код 1234 является 10011010010, которые не могут быть сохранены в целой переменной на вашей машине. Если вы измените тип возврата showbits() на длинные, это может сработать. Но это не постоянное решение получить двоичное значение.