0

I wonder how to put all combinations of 8 bits binary numbers into a two-dimensional array in C programming. 256x8 sized array and all combinations of 0 and 1 should be filled in the array.

From 00000000 to 11111111

4

2 に答える 2

1

すべての可能性を列挙したいので、単純にインデックスのバイナリ値を使用できます。展開されたループを含むバージョンを次に示します。

for (i = 0; i < 256; ++i) {
    t[i][0] = (i >> 7) & 1;
    t[i][1] = (i >> 6) & 1;
    t[i][2] = (i >> 5) & 1;
    t[i][3] = (i >> 4) & 1;
    t[i][4] = (i >> 3) & 1;
    t[i][5] = (i >> 2) & 1;
    t[i][6] = (i >> 1) & 1;
    t[i][7] = (i >> 0) & 1;
}

t結果配列とiループ インデックスはどこにありますか。

ステートメントt[i][5] = (i >> 2) & 1;(たとえば) は次のように機能します。

  • i >> 2の 3 eビットをi1 eの位置に置きます。
  • (i >> 2) & 1の 3 eビットiが か か0どうかをお知らせください1

1 :

  • 入力: 00001111;
  • i >> 2: 00000011;
  • (i >> 2) & 1:00000001

2 :

  • 入力: 00001011;
  • i >> 2: 00000010;
  • (i >> 2) & 1:00000000

読みやすさを向上させるためにマクロを使用することもできます。

/* Get the value of the bit at position `n` of `x`. */
#define GET_BIT(x, n) (((x) >> (n)) & 1)

for (i = 0; i < 256; ++i) {
    t[i][0] = GET_BIT(i, 7);
    t[i][1] = GET_BIT(i, 6);
    t[i][2] = GET_BIT(i, 5);
    t[i][3] = GET_BIT(i, 4);
    t[i][4] = GET_BIT(i, 3);
    t[i][5] = GET_BIT(i, 2);
    t[i][6] = GET_BIT(i, 1);
    t[i][7] = GET_BIT(i, 0);
}

例:

#include <stdio.h>

/* Get the value of the bit at position `n` of `x`. */
#define GET_BIT(x, n) (((x) >> (n)) & 1)

int main(void)
{
    int t[256][8], i, j;

    for (i = 0; i < 256; ++i) {
        t[i][0] = GET_BIT(i, 7);
        t[i][1] = GET_BIT(i, 6);
        t[i][2] = GET_BIT(i, 5);
        t[i][3] = GET_BIT(i, 4);
        t[i][4] = GET_BIT(i, 3);
        t[i][5] = GET_BIT(i, 2);
        t[i][6] = GET_BIT(i, 1);
        t[i][7] = GET_BIT(i, 0);
    }

    for (i = 0; i < 256; ++i, puts(""))
        for (j = 0; j < 8; ++j)
            printf("%d", t[i][j]);

    return 0;
}
于 2012-10-21T12:08:20.380 に答える
0

これはあなたが始めるためのものです:

for(int i=0;i<256;++i) {
    a[0]=i&(1<<0);
    a[1]=i&(1<<1);
    a[2]=i&(1<<2);
    ...
    a[7]=i&(1<<7);
}

これがすべての組み合わせになる理由は、i=0...255すべての組み合わせ 00000000...11111111 をバイト単位ではなくビット単位で処理するためです。ビットをバイトに抽出するだけです。

于 2012-10-21T11:58:30.730 に答える