Перевод переменной типа long в символьную строку в двоичном представлении - C (СИ)
Формулировка задачи:
Доброго времени суток!Можете помочь с заданием
Написать функцию для перевода переменной типа long в символьную строку в двоичном представлении
( ltoab( long num, char s[]) ) Проблема именно в преобразовании строки,есть код который просто переводит в двоич.представ.,а вот чтоб в чистую строку именно с '\0' не пойму пока...#include <stdio.h> #include <stdlib.h> void conv(long a){ char mas[100]; int i=0; while(a>0){ mas[i]=(a%2)+'0'; a=a/2; i++; } i--; while(i>=0){ i--; } printf("%c",mas[i] ); } int main(void){ long a; scanf("%d",&a); conv(a); }
Решение задачи: «Перевод переменной типа long в символьную строку в двоичном представлении»
textual
Листинг программы
#include <stdio.h> const char* ltoab(const long a) { static char binStr[sizeof(a) * 8 + 1]; long temp = a; int i = sizeof(a) * 8 - 1; binStr[sizeof(a) * 8] = '\0'; do { if ((temp & 1) == 0) { binStr[i] = '0'; } else { binStr[i] = '1'; } i--; temp = temp >> 1; } while (i >= 0); return (const char*) binStr; } int main(void) { long a = -344; printf("a = %ld, bin = %s\n", a, ltoab(a)); return 0; }
Объяснение кода листинга программы
- Переменная
a
объявлена какlong
и инициализирована значением-344
в функцииmain()
. - Функция
ltoab()
принимает один аргумент типаconst long
, который представляет двоичное представление числа, и возвращает указатель на символьную строку, представляющую двоичное представление числа в виде строки. - В функции
ltoab()
используется статическая переменная типаchar
с именемbinStr
, которая инициализируется как массив, достаточно большой для хранения двоичного представления числаa
. - Первый символ массива
binStr
инициализируется как нулевой символ, чтобы обеспечить корректное завершение строки. - Используется цикл
do-while
, который выполняет следующие действия: 5.1. Используется побитовый оператор&
для получения бита числаa
в позиции, которая будет обработана. 5.2. Если бит в позиции равен нулю, то в соответствующую позицию в массивеbinStr
записывается символ'0'
. 5.3. Если бит в позиции не равен нулю, то в соответствующую позицию в массивеbinStr
записывается символ'1'
. 5.4. Индекс позиции уменьшается на единицу. 5.5. Числоa
сдвигается вправо на одну позицию, используя побитовый оператор>>
. - Цикл выполняется до тех пор, пока индекс позиции больше или равен нулю.
- Функция
ltoab()
возвращает указатель на массивbinStr
. - В функции
main()
вызывается функцияltoab()
с аргументомa
, и результат выводится на консоль с помощью функцииprintf()
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д