Используя побитовые операции, преобразовать десятичное число в двоичное - 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, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д