【问题标题】:C conversion of signed int as binary to longC将带符号的int作为二进制转换为long
【发布时间】:2018-11-07 16:28:17
【问题描述】:

我有一个函数可以将整数转换为其二进制表示形式并将其存储在一个长变量中。我的问题是我的函数只转换正整数,所以我需要实现一个新函数,该函数将稍作改变以实现这一点。我仍然需要存放垃圾箱。代表。在一个长变量中,因为这取决于其他特征。有办法吗?

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

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;
}

【问题讨论】:

  • 在某些平台上,long 只有 32 位,它本身不能存储另一种 32 位类型的二进制表示(如 int 通常是),因为它太大了。如果你想显示二进制值,我建议你改用字符串,每个二进制数字一个字符(当然加上空终止符)。
  • 它只用于较小的整数,所以应该没有问题......
  • 我试过了,但出现了一些问题...你能修改我的函数来使用字符串吗?我的意思是返回字符串...
  • 当你说“更小的整数”是什么意思?你需要多少位?
  • 至于您的问题,将偶数负数视为无符号数。这将使从数字中获取位变得更加容易(但是您可能会得到比binn 变量容纳的更多的位很多)。

标签: c function binary long-integer signed


【解决方案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)

【讨论】:

    【解决方案2】:

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

    #include <stdio.h>
    
    int main ( void )
    {
        char temp[128] ;
        int num = -1  ;
        sprintf  ( temp , "%x" , num );
        puts ( temp ) ;
        return 0 ;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-14
      • 2013-10-01
      • 2014-11-28
      • 2014-03-13
      • 2015-03-18
      • 1970-01-01
      • 2019-03-18
      • 2016-07-13
      相关资源
      最近更新 更多