Я пытаюсь создать функцию, которая возвращает двоичный эквивалент заданного целого. Но когда дается тестовый вход 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;
}
Возможный дубликат [как напечатать двоичное число через printf] (http://stackoverflow.com/questions/6373093/how-to-print-binary-number-via-printf) – jdigital
Вы показали нам фактический результат , но что такое * ожидаемый вывод? Что должно делать «шоубиты»? Пробовали ли вы использовать отладчик для перехода по коду (когда вы это делаете, это помогает сделать код lense кратким, например, разбив одиночную строку 'showbits' на несколько строк и используя временные переменные)? –
Вы хотите, чтобы вы отображались в двоичном формате для заданного целого числа? Это дубликат [Print int int в двоичном представлении с использованием C] (http://stackoverflow.com/questions/1024389/print-an-int-in-binary-representation-using-c) –