0

我正在为家庭作业编写一个程序,它将添加 2 个 8 位二进制数。我将使用数组来存储读取的二进制数。在实际执行“加法”的函数中,它不会执行 for 循环。当我逐步执行时,它显示了循环变量 n 的初始化,然后它直接进入循环结束并退出。这是我的代码:

for ( int n = 7; n < 0 ; n-- )
{
    if ( carry == 0 )
    {
        if ( bin1[n] == 0 )
        {
            if ( bin2[n] == 0 )
            {
                sum[n] = 0;
                carry = 0;
            }
            else
            {
                sum[n] = 1;
                carry = 0;
            }
        }
        else
        {
            if ( bin2[n] == 0 )
            {
                sum[n] = 1;
                carry = 0;
            }
            else
            {
                sum[n] = 0;
                carry = 1;
            }
        }
    }
    else
    {
        if ( bin1[n] == 0 )
        {
            if ( bin2[n] == 0 )
            {
                sum[n] = 1;
                carry = 0;
            }
            else
            {
                sum[n] = 0;
                carry = 1;
            }
        }
        else
        {
            if ( bin2[n] == 0 )
            {
                sum[n] = 0;
                carry = 1;
            }
            else
            {
                sum[n] = 1;
                carry = 1;
            }
        }
    }
}

}

我知道这可能不是写这篇文章的最有效方法,所以请避免这些答案。

4

5 回答 5

9

您的条件从一开始就为假,因此循环立即退出:

for ( int n = 7; n < 0 ; n-- )

你可能的意思是:

for ( int n = 7; n >= 0 ; n-- )
于 2012-06-28T16:57:01.307 回答
3

如果n被初始化为 7,它永远不会是< 0......你的条件是错误的。应该是>>=

于 2012-06-28T16:56:59.283 回答
2

你的循环条件是错误的。n永远不会小于 0。试试这个:

for (int n = 7; n >= 0 ; n--)
于 2012-06-28T16:57:03.670 回答
1

(int n = 7; n < 0 ; n-- )

< 以错误的方式打开。要么做:

( int n = 7; n > 0 ; n-- )

或者( int n = 0; n < 7 ; n++ )

于 2012-06-28T16:57:58.613 回答
0

您的循环永远不会执行,因为 7 不小于 0。要修复它,只需编写:

for(int n = 7; n >= 0; --n) // note: I use --n, because n-- 
{                           // creates temporary objects 
    .....                   // and makes the program slower
}

如果不行就写一些printfs(或者couts,如果你使用iostream库的话)看看问题出在哪里

于 2012-06-28T17:12:06.607 回答