2017-09-07 31 views
-1

2つの引数をとるプログラムを作成します。私はその整数をバイナリ値に変換し、最も重要でない "1"ビットの位置を出力する必要があります。以下は、私が現在持っているコードで、整数をバイナリに変換するのに成功したコードです。私はバイナリ値で配列を塗りつぶし、最後の位置から循環し、 "1"が出現するまでカウンタを減分してから、現在の位置から配列の全体の長さを減算することによってそのビットの位置を出力したかった配列。2進値で配列を塗りつぶして最下位ビットを決定しようとしています

#include <stdio.h> 
#include <stdlib.h> 

int convert(int); 
int main(int argc, char *argv[]) 
{ 
    int bin; 
    int n = atoi(argv[2]); 

     if (argc<2) 
     { 
       printf("\nNot Enough Arguments."); 
     } 
     if (argc>2) 
     { 
       printf("\nToo Many Arguments."); 
     } 
     if (argc==2) 
     { 
       scanf("%d", &n); 
       bin = convert(n); 
       lessbit[] = bin; 
     } 

    return 0; 
} 

int convert(int n) 
{ 
    if (n == 0) 
    { 
     return 0; 
    } 
    else 
    { 
     return (n % 2 + 10 * convert(n/2)); 
    } 
} 
+0

'int n = atoi(argv [2]);'私はここで読み終えました。 'argc'の値をチェックする前に' argv [2] 'を使う?それはただのトラブルを求めているだけです。また、明示的に追加する必要があります:intは既にバイナリです... – John3136

+0

@ J.Clark整数はすでにバイナリ形式で格納されています。 –

+0

BTW 'argv'を使う前に' argc'をチェックする必要があります。 'lessbit [] = bin;': 'lessbit'? – BLUEPIXY

答えて

0

数字はマシンにバイナリとして保存されるため、何も変換する必要はありません。

最初の1つの位置を右から左(最下位1ビット)に移動する小さなデモプログラムです。

#include <stdio.h> 
#include <stdlib.h> 

int main(int arc, char* argv[]) { 
    if(argc != 2) 
     exit(EXIT_FAILURE); 

    int bin = atoi(argv[1]); 
    unsigned counter = 0; 

    while(bin % 2 == 0) { 
     bin >>= 1; 
     counter++; 
    } 

    printf("%u\n", counter); 
    return 0; 
} 

このコードは指数ベース2をプリントアウトだから数が3である1(これは2^3の位置にありますので)の位置となり、バイナリ出力1000である8である場合。

-1

あなたはこの

#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char const *argv[]) { 
    if(argc == 2) 
    { 
    int length = 0, count = 0; 
    int n = atoi(argv[1]); 
    int found = 0; 
    while(n) 
    { 
     if(n%2 && !found) 
     { 
     count = length; 
     found = 1; 
     } 
     n/=2; 
     length++; 
    } 
    printf("%d %d\n", length, count); 
    } 
    else printf("Invalid arguments\n"); 
    return 0; 
} 

使用長を行うと、あなたが必要としてカウントすることができます。

+0

説明のないコードダンプは悪い答えです。 – John3136

+0

同じことをしていました。反復的ではなく反復的に行い、結果を保存しました。バイナリのような整数を形成するのではなく、スペースを節約しようとしました。だからあなたは何の説明も必要ないかもしれないと思った。 ./a.outの後の引数が整数の場合、コードはダンプしません。 –

関連する問題