C中的计数进位操作

Posted

技术标签:

【中文标题】C中的计数进位操作【英文标题】:counting carry operations in C 【发布时间】:2021-12-25 12:24:46 【问题描述】:

我正在尝试编写一个用 C 编写的程序,该程序计算 2 个二进制数的加法并使用上面的进位行打印出结果,如下所示

我需要关于“进位”行计算的具体帮助,但我似乎无法开始工作。

我的想法是检查每个数字的末尾数字和进位行的总和是否为 0、1、2 或 3,具体取决于总和。

如果和为 2 或 3,则“进位”为 1,因此程序加 1 并乘以 10。

如果和为 0 或 1,则没有“进位”,因此程序乘以 10。

我不知道逻辑缺陷在哪里,我非常感谢一些帮助。

carry = 0;
count =0;

while ((num1Temp > 0) || (num2Temp > 0))

    count++;
    if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 3)
    
        carry++;
        carry = carry + pow(ten, count);
    
    else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 2)
    
        carry = carry + pow(ten, count);
        carry++;
    
    else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 1)
    
        carry = carry * ten;
    
    else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 0)
    
        carry = carry * ten;
    
    num1Temp = num1Temp / ten;
    num2Temp = num2Temp / ten;

【问题讨论】:

注意:尽量避免使用整数计算pow()。不要在每个循环中增加count++ 的幂,而是将一个值乘以10 欢迎来到 Stack Overflow。看看你使用carry的方式。您似乎不清楚是使用第一个数字还是最后一个数字。一旦您清楚这一点,您就可以查看 carry % ten 之类的内容,并确定它是否确实符合您的要求。 【参考方案1】:

1.我认为的主要缺陷 在您的程序中,您无法到达 num1Temp (5) 或 num2Temp101 /strong> (5) 计算进位 为了实现这一点 (101) 我写了类似的说明

if (num1Temp == 1)
        
            if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
            
                carry = carry + indice(ten, count+1);
            
        

2。而且我认为当 sum 小于 2 时,我们不必对 carry 的值做任何事情 这就是我跳过的原因

else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 1)
    
        carry = carry * ten;
    
    else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 0)
    
        carry = carry * ten;
    

3.为了简单地得到进位,我已经改变了

(carry % ten)

(carry/ indice(10,count)

修改后的代码

int main()

    int num1Temp=binary_8t(5);
    int num2Temp=binary_8t(5);
    int carry =0;
    int count =0;
    int ten=10;

while ((num1Temp > 0) || (num2Temp > 0))

    if (num1Temp && num2Temp)
    
      if (num1Temp == 1)
        
        if (((11 % ten) + (11 % ten) + (carry/ indice(10,count))) > 1)
            
                carry = carry + indice(ten, count+1);
            
        
    
    else if(1)
    
        if (num1Temp == 1)
        
            if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
            
                carry = carry + indice(ten, count+1);
            
        
    
        if (num2Temp == 1)
        
            if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
            
                carry = carry + indice(ten, count+1);
            
        
    
    
    if (((num1Temp % ten) + (num2Temp % ten) + (carry/ indice(10,count))) == 3)
    

        carry = carry + indice(ten, count+1);

    
    else if (((num1Temp % ten) + (num2Temp % ten) + (carry/ indice(10,count))) == 2)
    

        carry = carry + indice(ten, count+1);
    

    num1Temp = num1Temp / ten;
    num2Temp = num2Temp / ten;
    count++;

    printf("\nFinal carry: %d",carry);
    return 0;

power()binary_8t 是我自己使用的函数。

【讨论】:

请编辑您的帖子以包含您已完成的修复的详细信息。

以上是关于C中的计数进位操作的主要内容,如果未能解决你的问题,请参考以下文章

c语言的按位运算符怎么操作!?

verilog设计十进制计数器(含进位位)

汇编语言 加减法和进位标志位

zzulioj - 2624: 小H的奇怪加法

c语言 关于位域的使用

51nod1601完全图MST计数