Вывод двоичного представления дсятичного числа. - 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.