C 将有符号整数转换为二进制到长

C conversion of signed int as binary to long

我有一个函数可以将整数转换为二进制表示形式并将其存储在一个 long 变量中。我的问题是我的函数只转换正整数,所以我需要实现一个新函数,该函数将稍微改变一下来做到这一点。我仍然需要存放垃圾箱。代表在一个 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;
}

Is there a way?

考虑重用代码,因为您有一个有效的 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;
}

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


有关所有 int 到各种碱基(包括 2)的文本转换,请参阅 char* itostr(char *dest, size_t size, int a, int base)

我无法发表评论,但 sprintf 功能确实适合您:

#include <stdio.h>

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