Перевод переменной типа 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().