while (totalNumberOfBits != 0) {
putchar(n >> totalNumberOfBits) & 1;
totalNumberOfBits--;
}
好了,你的代码是很接近(并且实际上已经打印出正确的顺序位),但有3个个小错误。首先,在编译的Visual Studio时,给了我以下警告:
warning C4552: '&' : operator has no effect; expected operator with side-effect
据抱怨你的代码,你似乎不小心放置在您的putchar
函数调用的括号外的& 1
一部分。
while (totalNumberOfBits != 0) {
putchar((n >> totalNumberOfBits) & 1);
totalNumberOfBits--;
}
第二个错误是,虽然它现在正确地打印了位,但您正在打印\ 0和\ 1个字符。 \ 0不会显示在控制台中,并且\ 1很可能看起来像是一个笑脸,所以让我们来修复它。
while (totalNumberOfBits != 0) {
putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
totalNumberOfBits--;
}
现在非常接近,只剩下一个小小的错误。由于检查while循环执行的操作,以及您减少totalNumberOfBits
的位置,即使您的n
只有8位(因此超出范围),您也不检查2^0的位,而检查2^8。所以我们移动减量和替代!=
:
while (--totalNumberOfBits >= 0) {
putchar(((n >> totalNumberOfBits) & 1) ? '1' : '0');
}
为了澄清,你要打印出来的大端或小端? – Aistina 2010-02-03 14:00:35
最重要的位首先,所以我认为这是大endian? – leo 2010-02-03 14:08:22
是的。阅读我的答案:) – Aistina 2010-02-03 14:37:52