Вывод двоичного представления дсятичного числа. - C (СИ)
Формулировка задачи:
Вот код.
почему-то в Codeblocks и Dev-C++ выводит все нули, а в Visual Studio выводит нормально.
#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; }
Решение задачи: «Вывод двоичного представления дсятичного числа.»
textual
Листинг программы
printf("%d", (num >> i)&1);
Объяснение кода листинга программы
Код выводит двоичное представление десятичного числа. Вот список действий:
num
— это десятичное число, которое мы хотим преобразовать в двоичное.i
— это переменная, которая используется для сдвига десятичного числа вправо на текущую позицию.(num >> i)&1
— это выражение, которое вычисляет следующую операцию:num
сдвигается вправо наi
позиций.- Результат сдвига
num
наi
позиций вправо и влево на 1 позицию (это приводит к потере одной позиции, поскольку мы сдвигаемся на 1 позицию вправо). - Результат сдвига на
i
позиций вправо и на 1 позицию влево равен 1 или 0, в зависимости от того, был ли сдвинут бит нацело или нет.
- Результат выражения выводится с помощью функции
printf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д