将负十进制转换为其二进制表示
Posted
技术标签:
【中文标题】将负十进制转换为其二进制表示【英文标题】: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 <math.h>
这就是我原本打算做的,但它似乎太简单了。输出是正确的,但我有一种可疑的感觉,由于某种原因它不会通过 GitHub autograder ......无论如何,感谢您的帮助!如果不允许,我想我会回信。
【参考方案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 文章和其他一些堆栈溢出帖子。我仍然没有完全掌握它,这似乎很重要。无论如何,你可以给我一个简短的说明为什么会这样吗?以上是关于将负十进制转换为其二进制表示的主要内容,如果未能解决你的问题,请参考以下文章