这确实很简单。
int main()
{
int n,i,j;
n = 20;
i = 0;
char ch[8];
do
{
ch[i] = (n%2) + '0';
n /= 2;
// SIMPLE WAY
if(n != 0)
i++;
}
while(n != 0);
for(j=0; j<=i; j++)
{
printf("%c",ch[i-j]);
}
return 0;
}
但是我不喜欢这样
我尝试了以下方法,但是代码不正确
int main()
{
int n,i,j;
n = 20;
i = 0;
char ch[8];
do
{
ch[i] = (n%2) + '0';
n /= 2;
}
while(n != 0 && i++); // THIS
for(j=0; j<=i; j++)
{
printf("%c",ch[i-j]);
}
return 0;
}
仅当使用BEST WAY循环为真时,如何才能使值递增?
或者只是正确的第二种方式while(n != 0 && i++)
答案 0 :(得分:6)
仅当使用BEST WAY循环为真时,如何才能使值递增?
或者只是正确的第二种方式while(n!= 0 && i ++)
我不推荐任何一种方法。
无需进行特殊测试即可查看代码是否应增加i
。
do {
ch[i] = (n%2) + '0';
n /= 2;
i++;
} while(n != 0);
// Just decrement after the loop
i--;
for(j=0; j<=i; j++) {
printf("%c",ch[i-j]);
}
或者根本不减少
do {
ch[i] = (n%2) + '0';
n /= 2;
i++;
} while(n != 0);
for(j=0; j<i; j++) {
printf("%c",ch[i-1-j]);
}
或者也使用do ... while
进行打印。
do {
ch[i++] = (n%2) + '0';
n /= 2;
} while(n);
do {
printf("%c",ch[--i]);
} while (i);
注意:
char ch[8];
对于int
范围之外的[-255 ... 255]
来说太小。对于32位int
,请使用char ch[32];
或更大的位数。通常,使用char ch[sizeof(int) * CHAR_BIT];
ch[i] = (n%2) + '0';
在n < 0
时肯定会导致意外结果。请考虑使用unsigned
类型。
答案 1 :(得分:1)
好吧,您可以随时这样做:
do {
// code
} while(n != 0 && ++i);
这样,i
的第一部分求值后,&&
就立即增加,&&
应用于n != 0
和{{1 }}。
答案 2 :(得分:1)
在C ++中,您可以这样做:
std::cout << std::bitset<8>(n); // 00010100 for n = 20
如果领先的0
没问题。
答案 3 :(得分:-1)
可能是这样的:
int n = 20;
int i = 7;
char ch[] = "00000000";
while (n) // if n already = 0 then do nothing
{
ch[i--] = (n % 2) + '0'; // assign then increment
n /= 2; // shift to right same as n >>= 1;
}
printf ("%08s", ch);
答案 4 :(得分:-2)
do
{ .......... }while(n && i++ ? 1 : n);
有关&&
动作的内容称为短路评估