此题目的难点在于如何将number按二进制顺序存入字符数组中。
设number=10=
00000000000000000000000000001010;
mask=pow(2,31)=2147483648=10000000000000000000000000000000;
第1次运算number&mask,i=0:
00000000000000000000000000001010
&
10000000000000000000000000000000
=
00000000000000000000000000000000(=0,false)
str[0]='0',mask >>= 1,mark=01000000000000000000000000000000
第2次运算number&mask,i=1:
00000000000000000000000000001010
&
01000000000000000000000000000000
=
00000000000000000000000000000000(=0,false)
str[1]='0',mask >>= 1,mark=00100000000000000000000000000000
......
第29次运算number&mask,i=28:
00000000000000000000000000001010
&
00000000000000000000000000001000
=
00000000000000000000000000001000(>0,true)
str[28]='1',mask >>= 1,mark=00000000000000000000000000000100
第30次运算number&mask,i=29:
00000000000000000000000000001010
&
00000000000000000000000000000100
=
00000000000000000000000000000000(=0,false)
str[29]='0',mask >>= 1,mark=00000000000000000000000000000010
第31次运算number&mask,i=30:
00000000000000000000000000001010
&
00000000000000000000000000000010
=
00000000000000000000000000000010(>0,true)
str[30]='1',mask >>= 1,mark=00000000000000000000000000000001
第32次运算number&mask,i=31:
00000000000000000000000000001010
&
00000000000000000000000000000001
=
00000000000000000000000000000000(=0,false)
str[31]='0',mask >>= 1,mark=00000000000000000000000000000000
最后str[33]="00000000000000000000000000001010"。综上,用1与number相对应的二进制位与运算,用结果的布尔值来判断对应位是0还是1,加入字符数组输出。
[此贴子已经被作者于2016-3-3 23:24编辑过]