4

C ライブラリに 10 進数を 2 進数に変換し、配列の位置に数値を保存する関数があるかどうかを知りたいです。例: 2 -> 10 -> 配列 [0] = 0 配列 [1] = 1。

4

7 に答える 7

5

ここ:

void dec2bin(int c)
{
   int i = 0;
   for(i = 31; i >= 0; i--){
     if((c & (1 << i)) != 0){
       printf("1");
     }else{
       printf("0");
     } 
   }
}

ただし、これは整数の値をバイナリ形式で出力するだけです。とにかく、すべてのデータは内部的にバイナリ形式で表されます。

于 2012-10-27T10:22:03.397 に答える
1

10 進数とは何かを定義していません。その数字の文字表現(ASCIIなど)だと思います。

数字は単なる数字であることに注意してください。2 進数または 10 進数は存在しませんが、特定の数値には 2 進数と 10 進数の表現がある場合があります。数字は数字ではありません!

次に、おそらくsscanf(3)またはstrtol(3) pratoiで文字列を整数 (たとえば anintまたは a long)に変換し、 snprintf(3)で整数を文字列に変換します。

0数値を (または-sのみを含む) バイナリ文字列に変換する場合は、1 charその変換を自分でコーディングする必要があります。バイナリ文字列を何らかのlong用途に変換するにはstrtol

于 2012-10-27T10:23:49.373 に答える
0

C 標準ライブラリにはそのような関数はありません。とにかく、あなたはあなた自身を書くことができます:

void get_bin(int *dst, intmax_t x);

dstは結果の配列 ( s10s を含む) で、xは 10 進数です。

例えば:

C89 バージョン:

#include <limits.h>

void get_bin(int *dst, int x)
{
    int i;

    for (i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
        *dst++ = x >> i & 1;
}

C99 バージョン:

/* C99 version */
#include <limits.h>
#include <stdint.h>

void get_bin(int *dst, intmax_t x)
{
    for (intmax_t i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
        *dst++ = x >> i & 1;
}

次のように動作します: のバイナリ表現をx左から右に実行します。式は- 1(sizeof x * CHAR_BIT - 1)のビット数を与えます。次に、各ビットの値 ( ) を取得し、それを配列にプッシュします。x*dst++ = x >> i & 1

活用例:

void get_bin(int *dst, int x)
{
    int i;

    for (i = sizeof x * CHAR_BIT - 1; i >= 0; --i)
        *dst++ = x >> i & 1;
}

int main(void)
{
    int buf[128];       /* binary number */
    int n = 42;         /* decimal number */
    unsigned int i;

    get_bin(buf, n);

    for (i = 0; i < sizeof n * CHAR_BIT; ++i)
        printf("%d", buf[i]);

    return 0;
}
于 2012-10-27T10:21:30.773 に答える
-1

char * itoa ( int value, char * str, int base ); 詳細はこちら...を使用します。

于 2013-09-13T14:13:55.520 に答える