Вывод двоичного представления дсятичного числа. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот код.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

/*  Функция для вывода значений битов, представляющих
    заданное целое число в памяти компьютера.
*/
void ShowInBin(int x)
{
    int     i, j, num_bits_in_int, num_bits;
    char *  Arr;
 
    /*  Количество битов, необходимое
            для представления числа x.  */
    num_bits = (int)(log((double)x) / log(2.0)) + 1;
 
    /*  Количество битов, необходимое
        для представления максимального
                        целого числа.   */
    j = num_bits_in_int = sizeof(int) * 8;
 
    Arr = (char *) malloc(sizeof(char) * num_bits_in_int);
 
    /*  Обнуляем необходимое количество битов слева.    */
    for (i = 0; i < num_bits_in_int - num_bits; ++i)
        Arr[i] = '0';
 
    while (j > i)
    {
        Arr[--j] = x % 2 + '0';
        x /= 2;
    }
 
    for (i = 0; i < num_bits_in_int; ++i)
        printf("%c", Arr[i]);
 
    free(Arr);
}
 
int main()
{
    int x;
    x = 8;
    ShowInBin(x);
    return 0;
}
почему-то в Codeblocks и Dev-C++ выводит все нули, а в Visual Studio выводит нормально.

Решение задачи: «Вывод двоичного представления дсятичного числа.»

textual
Листинг программы
printf("%d", (num >> i)&1);

Объяснение кода листинга программы

Код выводит двоичное представление десятичного числа. Вот список действий:

  1. num — это десятичное число, которое мы хотим преобразовать в двоичное.
  2. i — это переменная, которая используется для сдвига десятичного числа вправо на текущую позицию.
  3. (num >> i)&1 — это выражение, которое вычисляет следующую операцию:
    • num сдвигается вправо на i позиций.
    • Результат сдвига num на i позиций вправо и влево на 1 позицию (это приводит к потере одной позиции, поскольку мы сдвигаемся на 1 позицию вправо).
    • Результат сдвига на i позиций вправо и на 1 позицию влево равен 1 или 0, в зависимости от того, был ли сдвинут бит нацело или нет.
  4. Результат выражения выводится с помощью функции printf.

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы