繁体   English   中英

如何在 C 中添加二进制数?

[英]How to add binary numbers in C?

我目前正在做一项大学任务,我必须在 C (没有 arrays )中添加两个二进制数。 我了解算法,我的意思是,如何添加二进制数,但我不知道如何将其编写为代码。 在这个特定的练习中,用户必须为每个操作数输入两个数字(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;
{

但我该如何继续? 我想明确表示我不想要代码(如果我愿意,我可以从互联网上复制它),我想理解它。

评论已经暗示了这一点,但我认为这值得一个关于如何做到这一点的完整答案(在逻辑电路和没有 LUT 的代码之间合并)所以这里是:

(cy c) = a+b+cy'真值表:

a b cy'| cy c
-------|-----
0 0 0  |  0 0 
0 0 1  |  0 1
0 1 0  |  0 1
0 1 1  |  1 0
1 0 0  |  0 1 
1 0 1  |  1 0 
1 1 0  |  1 0
1 1 1  |  1 1

卡诺图

[c]     bbb  | [cy]    bbb
      aaa    |       aaa  
    0 1 0 1  |     0 0 1 0
cy' 1 0 1 0  | cy' 0 1 1 1

逻辑方程:

c  = a^b^cy'              // btw this is also how even/odd parity is computed
cy = (cy'&(a|b))|(a&b)

一些示例代码:

void add(int &cy,int &c,int a,int b,int _cy)    // (cy c) = a+b+_cy
    {
    cy=((a|b)&_cy)|(a&b);
    c =a^b^_cy;
    }

...

int a1,a2,b1,b2,c1,c2,cy;   // assuming a2,b2,c2 is lsb that is weird usually lowest index is lsb

// obtain a1,a2,b1,b2
cy=0;                       // cy at start is zero
add(cy,c2,a2,b2,cy);        // lsb bit
add(cy,c1,a1,b1,cy);        // next bit ...
// print cy,c1,c2 as result

...

我不在 C 中编码,而是在 C++ 中编码,所以我希望不要使用 C 中受限的东西。 所以我只是将 1 位加法器打包到 function 中,并为从 lsb 到 msb 的每个位调用它...如果还不允许使用函数,那么您需要为每个位复制 function 代码并重写变量索引...

注意a?,b?,c?,cy的允许值只有{ 0, 1 }因为我使用了位运算符!!!

我也没有优化方程......你可能想使用德摩根定律和/或逻辑恒等式来改进/简化/规范化它们......

如您所见,您可以直接使用逻辑运算符进行逻辑方程,无需缓慢的if/else语句

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM