2017-01-22 4 views
0
printf("Enter a positive integer"); 
unsigned int ip; 
scanf("%d", &ip); 
printf("\n Binary Conversion: "); 
int c,k,count = 1; 
for(c = 31; c >= 0; c--) { 
    k = ip >> c; 
    if(k && 1) { 
     printf("1"); 
    } else { 
     printf("0"); 
    } 

    if(count % 8 == 0) { 
     printf(" "); 
    } 
    count++; 
} 

何らかの理由で、割り当て解除を解除しても正しい出力が得られません。10進数から2進数への変換で正しい出力を得ることができないのはなぜですか?

+0

の 使用&私は愚かに感じます。 –

+0

しかし、それでも私に間違った出力を与えます。3232236930 –

+0

SOはデバッグサービスではありません。シンボルでコンパイルするには、デバッガ内でコードを実行し、プログラムを1行ずつトレースして、関連する変数の値を調べ、実際に何が起こっているのかを調べます。 *具体的な質問が発生した場合は、ここに戻って自由に感じてください。 – alk

答えて

0

あなたの問題は、この行にある:

if(k && 1) 

&&あなたが使用している必要がありビット単位 AND演算子ではない、論理 AND演算子です。それがテストしているのは、 "kと1が共にゼロでない場合、進める"と1が明らかに冗長なので、 "kが0でないならば、進行する"というテストです。 1を印刷したくない場所です。完全if/elseを使用しないようにするに

#include <stdio.h> 

int main() 
{ 
    unsigned int ip; 
    int i; 
    printf("Enter a positive integer: "); 
    scanf("%d", &ip); 
    printf("\nBinary Conversion: "); 
    for(i = 31; i >= 0; i--) 
    { 
     printf("%d", (ip>>i)&1);  
     if(i%8==0) printf(" "); 
    } 
    return 0; 
} 

:あなたもにあなたのコードを短くすることができ

if(k & 1) 

ラインをのように記述する必要があります。

0

%dを使用する代わりに、%uを使用する必要があります。代わりに& &

printf("Enter a positive integer"); 
unsigned int ip; 
scanf("%u", &ip); 
printf("\n Binary Conversion: "); 
int c,k,count = 1; 
for(c = 31; c >= 0; c--) { 
    k = ip >> c; 
    if(k & 1) { 
     printf("1"); 
    } else { 
     printf("0"); 
    } 

    if(count % 8 == 0) { 
     printf(" "); 
    } 
    count++; 
} 
関連する問題