【问题标题】:Turning a negative decimal into its binary representation将负十进制转换为其二进制表示
【发布时间】:2021-12-07 16:22:06
【问题描述】:

我正在尝试找出一种方法,我可以从用户那里获取输入,并将其显示在 BinRep[] 数组中。目前这个程序只适用于正数,但是我很难找到一种方法让它也适用于负数。有什么想法吗?

int n = atoi(argv[1]);
  int binRep[N];
  int i;
  int flippedNum;

  for (i = 0; i < N; i++) {
    binRep[i] = 0;
  }

  i = 0;

  while (n > 0) {
    binRep[i] = n % 2;
    n = n / 2;
    i++;
  }

  for (i = N - 1; i >= 0; i--) {
    printf("%d", binRep[i]);
  }
  printf("\n");
  return 0;
}

【问题讨论】:

  • 您了解带符号的数字如何用二进制表示 - 即二进制补码吗?一种方法是将正数转换为二进制,然后应用二进制补码来获得负表示。似乎您或编写代码的人可能已经按照未使用的flippedNum 变量所暗示的这些思路进行思考。
  • 您是否只是想在二进制中显示与输入为正数相同的数字,但前面有一个-
  • 没有。二进制输出应该是数字的正数。 IE -7 和 7 应该输出相同(二进制为 7)。
  • 哦,那听起来你只需要添加n = abs(n);。别忘了#include &lt;math.h&gt;
  • 这就是我原本打算做的,但它似乎太简单了。输出是正确的,但我有一种可疑的感觉,由于某种原因它不会通过 GitHub autograder ......无论如何,感谢您的帮助!如果不允许,我想我会回信。

标签: c binary decimal data-conversion


【解决方案1】:
unsigned int n = (unsigned int ) atoi( argv[1] );
unsigned int binRep[N];

应该工作

但负数将采用二进制补码表示。

【讨论】:

  • 命令行输入必须是有效的有符号整数。这就是为什么我在其他方面遇到麻烦。
  • 1.) 命令行的输入始终是 char * 2.) atoi( argv[1] ) 输出 int 3.) (unsigned int) 将此输出转换为 unsigned int
  • 你能解释一下为什么这样有效吗?我希望能够完全理解和掌握它。
  • twos complement wikipedia 如果您无法理解我的评论,我会推荐“C 编程语言”
  • 我阅读了 Wiki 文章和其他一些堆栈溢出帖子。我仍然没有完全掌握它,这似乎很重要。无论如何,你可以给我一个简短的说明为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多