Используя побитовые операции, преобразовать десятичное число в двоичное - 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;
}
Объяснение кода листинга программы
- В функции dec2bin() объявлены следующие переменные:
- k (типа int) используется для хранения результата побитовой операции AND, а также для хранения числового значения от 0 до 1.
- buf (указатель на char) используется для хранения результата преобразования десятичного числа в двоичное.
- p (указатель на char) используется для перемещения указателя на последний символ в строке buf.
- n (типа int) используется для хранения исходного десятичного числа.
- В функции main() объявлены следующие переменные:
- n (типа int) используется для хранения числа, введенного пользователем.
- В функции 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.
- В функции main() выполняются следующие действия: 1). Выводится сообщение, призывающее пользователя ввести положительное число. 2). С помощью функции scanf() считывается число n из стандартного ввода. 3). С помощью функции printf() выводится результат преобразования числа n в двоичную систему счисления с помощью функции dec2bin(). 4). Возвращается 0, чтобы указать, что программа успешно завершилась.