Используя побитовые операции, преобразовать десятичное число в двоичное - C (СИ)

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

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

printf("Десятичное значение числа: "); scanf("%d", &x); 
        a=0;
        do
        {
            a=a+x&1;
            printf("\n\t%d",a);
            a=a<<1;
            x=x>>1;
        }
        while (x!=0);
        printf("\n\tДвоичное значение числа: ");
        printf("%d",a);
что-то написал, но не работает
либо вот, но нужно выполнить прямое отображение кода:
printf("Дестичное значение числа: "); scanf("%d", &x); 
        printf("\tДвоичное значение числа: ");
        do
        {
            
            if (x<0)
            {
                x=-x; 
                help=1;
            }
            else
                help=0;
            a=x&1;
            printf("%d",a);
            x=x>>1;
        }
        while (x!=0);
        if (help!=1)
            printf("\n\t");
        else 
        {
            printf("%d", help);
            printf("\n\t");
        }

Решение задачи: «Используя побитовые операции, преобразовать десятичное число в двоичное»

textual
Листинг программы
#include <stdio.h>
#include <malloc.h>
 
char * dec2bin(int n)
{
       int k;
       char *buf=(char *)calloc(20,1);
       char *p = buf+18;
 
       while (1)
       {
          if (n == 0) break;
          k=n & 0x00000001;
          *p=48+k;
          p--;
          n=n>>1;
       }
       return ++p;
}
 
 
int main(int argc, char* argv[])
{
    int n;
    printf("Enter positve number \n");
    scanf("%d",&n);
        printf("%s",dec2bin(n));
    return 0;
}

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

  1. В функции dec2bin() объявлены следующие переменные:
    • k (типа int) используется для хранения результата побитовой операции AND, а также для хранения числового значения от 0 до 1.
    • buf (указатель на char) используется для хранения результата преобразования десятичного числа в двоичное.
    • p (указатель на char) используется для перемещения указателя на последний символ в строке buf.
    • n (типа int) используется для хранения исходного десятичного числа.
  2. В функции main() объявлены следующие переменные:
    • n (типа int) используется для хранения числа, введенного пользователем.
  3. В функции dec2bin() выполняются следующие действия: 1). Создается буфер buf с помощью функции calloc(), которая выделяет память для хранения 20 символов. 2). Указатель p устанавливается на 19-й символ в буфере buf. 3). Запускается цикл while, который выполняется до тех пор, пока n не станет равным 0. 4). Внутри цикла выполняется побитовая операция AND (n & 0x00000001), которая возвращает значение первого бита числа n. 5). Результат побитовой операции AND записывается в переменную k. 6). В буфер buf записывается символ, соответствующий числу k, с помощью выражения 48+k. 7). Указатель p уменьшается на 1, чтобы переместиться на предыдущий символ в буфере buf. 8). Число n сдвигается вправо на 1 бит с помощью выражения n>>1. 9). После выхода из цикла while, возвращается указатель на последний символ в буфере buf.
  4. В функции main() выполняются следующие действия: 1). Выводится сообщение, призывающее пользователя ввести положительное число. 2). С помощью функции scanf() считывается число n из стандартного ввода. 3). С помощью функции printf() выводится результат преобразования числа n в двоичную систему счисления с помощью функции dec2bin(). 4). Возвращается 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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