0

Cでメモリからたとえば1000ビットを予約する最良の方法を教えてください。プログラムを実行していて、フラグ (値 =0 または =1) を管理する必要があります。それを行う最も効率的な方法は何ですか?必要なスペースを確保し、マスクを使用してフラグ (ビット) を制御することを考えていました。ありがとうございました

4

3 に答える 3

3

Cでアクセス/アドレス指定できるメモリの最小量は、CHAR_BITビット幅のバイトです(少なくとも8ビット長であることが保証されています)。したがって、パックされた構造を探している場合は、ceil(1000/8)バイトを使用できます。

ビット操作の詳細については、この SO の質問をご覧ください

于 2012-06-02T19:47:21.930 に答える
2

bool次のタイプを使用できます。

#include <stdbool.h> // for bool
#include <stdlib.h>  // for malloc

#define N  1000

bool *b = malloc(N * sizeof *b);

// for example to set the 42th element to 1
b[41] = 1;
于 2012-06-02T19:54:50.440 に答える
0

何かのようなもの?

struct bitf
  {

    unsigned char b:1;
  };
struct bitf[1000];

ビットマスクを使用しない場合、最大サイズはコンピューター上の変数の最大サイズです。 1,024 ビット (128 バイト) のビット フィールドを定義しようとしてエラーが発生しました

または最小メモリの場合:

#include <stdio.h>

int main(void)
{

  struct bitf
  {

    unsigned char a:1;
    unsigned char b:1;
    unsigned char c:1;
    unsigned char d:1;
    unsigned char e:1;
    unsigned char f:1;
    unsigned char g:1;
    unsigned char h:1;

  };

  struct bitf number[125];

  number[100].a = 1;
  number[110].h =1;
  printf("size: %d  a:%d   h:%d\n",sizeof(number), number[100].a ==0, number[110].h ==1);


  return 0;
}

出力:

size: 125  a:0   h:1
于 2012-06-02T22:57:22.297 に答える