C преобразование подписанного int как двоичного в long - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть функция, которая преобразует целое число в его двоичное представление и хранится в длинной переменной. Моя проблема в том, что моя функция конвертирует только положительные целые числа, поэтому мне нужно реализовать новую функцию, которая будет слегка изменена, чтобы сделать это. Мне все еще нужно хранить мусорное ведро. по донесению в длинной переменной, потому что это зависит от других функций. Есть ли способ?

Моя функция, которая успешно преобразует только натуральные числа:

long convertToBin(int decn)
{
  long binn = 0;
  long rem;
  long a = 1;
  while(decn != 0)
  {
    rem = decn % 2;
    binn = binn + rem * a;
    a = a * 10;
    decn = decn / 2;
  }
return binn;
}

Я пробовал вот так, но что-то не так - не работает ...

long negConvertToBin(int decn)
{
  long binn = 0;
  decn = abs(decn);
  decn = decn - 1;
  decn = ~decn;
  long rem;
  long a = 1;
  while(decn != 0)
  {
      rem = decn % 2;
      binn = binn + rem * a;
      a = a * 10;
      decn = decn / 2;
  }

return binn;
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

я не могу комментировать, но функция sprintf действительно работает для вас:

#include <stdio.h>

int main ( void )
{
    char temp[128] ;
    int num = -1  ;
    sprintf  ( temp , "%x" , num );
    puts ( temp ) ;
    return 0 ;
}
0 голосов
/ 07 ноября 2018

Есть ли способ?

Рассмотрите возможность повторного использования кода, поскольку у вас есть рабочий convertToBin() для положительных значений.

long NegAndPosConvertToBin(int decn) {
  if (decn < 0) return -convertToBin(-decn);
  return convertToBin(decn);
}

Если ОП все еще хочет автономный long negConvertToBin(int decn), тогда

long negConvertToBin(int decn) {
  decn = -decn;

  // same body as convertToBin() without the return

  return -binn;
}

Как прокомментировал @ Некоторые программисты, чувак , подход OP имеет ограниченный полезный диапазон int, так как переполнение происходит при больших значениях.


Текстовое преобразование для всех int в различные базы, включая 2, см. char* itostr(char *dest, size_t size, int a, int base)

...