C将有符号的int二进制转换为long

时间:2018-11-07 16:28:17

标签: c function binary long-integer signed

我有一个函数,可将整数转换为二进制表示形式并将其存储在long变量中。我的问题是我的函数只能转换正整数,因此我需要实现一个新函数,将其略微更改即可。我仍然需要存储垃圾箱。代表在一个长变量中,因为这取决于其他功能。有办法吗?

我的函数只能成功转换正整数:

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 :(得分:1)

  

有办法吗?

请考虑重复使用代码,因为您可以使用convertToBin()来获取正值。

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

如果OP仍需要独立的long negConvertToBin(int decn),则

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

  // same body as convertToBin() without the return

  return -binn;
}

正如@Some programmer dude所评论的那样,OP的方法限制了int的有用范围,因为发生大数值溢出。


要将所有int转换为包括2在内的各种基数,请参见char* itostr(char *dest, size_t size, int a, int base)

答案 1 :(得分:1)

我无法发表评论,但 sprintf 功能确实可以为您服务:

#include <stdio.h>

int main ( void )
{
    char temp[128] ;
    int num = -1  ;
    sprintf  ( temp , "%x" , num );
    puts ( temp ) ;
    return 0 ;
}