我试图在c中打印出二进制数,但是我遇到的难题是它以相反的顺序打印出来。我定义了一个函数来告诉我有多少位,这样我就可以从最后一位开始工作

得到我可以使用的第n位

(value >> totalNumberOfBits) & 1;


在一段时间的循环中,我可以运行直到totalNumberOfBits == 0;

因此

while(totalNumberOfBits!= 0){
     putchar(n >> totalNumberOfBits)&1;
     totalNumberOfBits--;
}


任何指针都将受到欢迎-我想我可能会感到不快,我有一种方法可以向后打印数字,但是我试图找到避免这种情况的方法

谢谢

最佳答案

while (totalNumberOfBits != 0) {
     putchar(n >> totalNumberOfBits) & 1;
     totalNumberOfBits--;
}


好的,您的代码非常接近(实际上已经按照正确的顺序打印出了位),但是有3个小错误。首先,在编译Visual Studio时会出现以下警告:

warning C4552: '&' : operator has no effect; expected operator with side-effect


它在抱怨代码的& 1部分,您似乎不小心将其放在了putchar函数调用的括号之外。

while (totalNumberOfBits != 0) {
     putchar((n >> totalNumberOfBits) & 1);
     totalNumberOfBits--;
}


第二个错误是,虽然现在可以正确打印位,但是您正在打印\ 0和\ 1字符。 \ 0将不会在控制台中显示,\ 1很可能看起来像是一个笑脸,因此我们也要对其进行修复。

while (totalNumberOfBits != 0) {
     putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
     totalNumberOfBits--;
}


现在已经非常接近了,只剩下一个小错误。由于执行while循环检查以及减小totalNumberOfBits的位置,因此您永远不会检查2 ^ 0的位,而即使您的n只有8位,也不会检查2 ^ 8(因此范围)。因此,我们移动减量,并替换!=

while (--totalNumberOfBits >= 0) {
     putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
}

关于c - 撤消订单的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2192376/

10-11 21:16