【发布时间】:2021-07-09 17:01:46
【问题描述】:
我目前正在做一项大学任务,我必须在 C 中添加两个二进制数(没有数组)。我了解算法,我的意思是,如何添加二进制数,但我不知道如何将其编写为代码。 在这个特定的练习中,用户必须为每个操作数输入两个数字(0 或 1)。 a1 和 a2 用于第一个操作数,b1 和 b2 用于第二个操作数。例如:
用户介绍 1 1 (a1, a2) 表示第一个二进制数,0 1 (b1, b2) 表示第二个。结果 (100) 是程序必须返回的结果。我已经看过一些代码示例,但仍然不明白它是如何工作的。使用 if 和 else if 语句我可以理解其中的一部分(如果我没记错的话):
if((a2 == 0) && (b2 == 0)) {
sum = 0;
carry = 0;
}
else if((a2 == 0) && (b2 == 1) || (a2 == 1) && (b2 == 0)) {
sum = 1;
carry = 0;
}
else if((a2 == 1) && (b2 == 1)) {
sum = 0;
carry = 1;
{
但是我该如何继续呢? 我想明确表示我不想要代码(如果我愿意,我可以从互联网上复制它),我想了解它。
【问题讨论】:
-
您的代码是半加法器。其他数字需要Full Adder才能添加低位进位。
-
您的困惑究竟是什么?您提供的算法似乎很好(尽管
and不是C 中的关键字)。您只需要考虑更多数字并从前一个数字转发执行。 -
用最简单的术语来说,您需要对每个数字执行二进制加法。幸运的是,您只需考虑 2 位数。每个添加有 3 个输入,
a、b和carry_in。有两个输出,c和carry_out。对于每个数字,carry_in值等于先前添加的carry_out,初始为carry_in = 0。有了它,全加器的构建块。例如,如果要添加 01 和 01,则有a1=1、b1=1、carry_in=0。结果:c1=0和carry_out=1。因此,对于下一个数字,您有a2=0、b2=0、carry_in=1。 -
好的,但是我如何连接这两个部分。我的意思是,在代码的第一部分: if((a2 == 0) && (b2 == 0) { sum = 0; carry = 0; 我必须把 a1 和 b1 的情况放在那里?跨度>
-
@AKSingh 你错过了我的意思...... OP 是关于具有特定限制(以某种方式做事)的大学任务,特别是没有数组......因为输入是位粒度甚至数组位是不允许的。如果您使用存储在单个整数中的整数,那么它是否被认为是有效的,那么它的老师认为它是否有效..无论如何使用它都会给任务带来“失败”标记的风险。
标签: c algorithm binary numbers addition