我试图在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/