1

这段代码是将十进制数转换为二进制数的函数的一部分,将其放置在 char instBin[33] 的特定索引中,该索引由调用函数通过引用创建和传递。它传入十进制数,即您想要的二进制位数(在给定的 bin 编号前面附加额外的 0)。我已经摆弄了一段时间,但我无法将 0 和 1 放入数组中。我已经明白了 instBin[i] = '1'; 根本不工作——当我打印 instBin 时,什么也没发生。我看过其他做这种事情的例子,但似乎在选择索引时给一个字符数组一个变量应该工作......有什么想法为什么我的不是?

int printBin(int num, int numBits, int startIndex, char * instBin){
    int r, i; /* r for remainder, i for index */
const int FAIL = 0;
i = startIndex + numBits; /* start indexing at end of current segment */
while (num > 0)
{
    /* as long as i >= startIndex, we can still add to array */
    if (i >= startIndex){
        r = num % 2; /* find the remainder */
        if (r == 1)
            instBin[i] = '1';
        else /* r == 0 */
            instBin[i] = '0';
        num /= 2; /* then actually divide the number */
        i--;
    }
    else /* num is too big to fit in given number of bits */
    return FAIL;
}
/* return the 1 for success*/
return 1;
}
4

1 回答 1

0

有两个主要问题。第一个是栅栏错误。假设您的意图是将最高有效位放入缓冲区中startIndex,您需要从i = startIndex + numBits - 1. numBits = 1如果您需要说服这一点,请考虑一个示例。

第二个问题是,当数字小到需要前导零时,您的循环不会提供它们。它一次提供一位数字,直到数字达到 0,然后停止。您需要在主循环之后进行第二个循环,以添加零。如果您查看i主循环之后的值,它会告诉您主循环停止的位置,因此您可以像这样完成工作:

while(i >= startIndex)
    instBin[i--] = '0';
于 2013-05-22T22:22:10.427 回答