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