- 您正在反转这些位。
- 您不能使用x的剩余部分作为终止循环的指示符。
考虑例如4.
后第一循环迭代:
rem == 0
converted == 0
x == 2
后第二循环迭代:
rem == 0
converted == 0
x == 1
然后设置转换为1
尝试:
int i = sizeof(x) * 8; // i is now number of bits in x
while (i>0) {
--i;
converted *= 10;
converted |= (x >> i) & 1;
// Shift x right to get bit number i in the rightmost position,
// then and with 1 to remove any bits left of bit number i,
// and finally or it into the rightmost position in converted
}
运行a波夫代码,其中x为unsigned char(8位)与值129(二进制10000001)
与i = 8
,无符号字符* 8的大小在第一循环开始迭代i
将7.然后,我们采取x
(129 )并将其右移7位,给出值1.这被或成converted
,其变为1.接下来的迭代,我们将converted
乘以10(所以现在是10)开始,然后我们将x
右移6位值变为2)并与1进行AND运算(值变为0)。我们或0 converted
,这是当时仍10. 3日 - 7日反复做同样的事情,converted
乘以10和一个特定的位由x
和或运算提取到converted
。这些迭代之后,converted
是1000000
在最后一次迭代中,第一converted
乘以10,成为为10000000,我们转向x
右侧0位,得到原始值129.我们,把X 1,这给值1. 1,然后将进行或运算converted
,成为10000001.
这真的令人沮丧,因为数字已经是二进制形式,并且不需要转换。你可以做的是打印它的位,但互联网上有很多例子。 – 2011-02-28 16:10:38
你正在做的是转换成一个十进制数字,看起来像二进制,但有错误的值。你的家庭作业到底是什么? – geoffspear 2011-02-28 16:12:08
这是功课吗? – GWW 2011-02-28 16:15:40