3

1ビット整数のtypedefが欲しいので、これを考えましtypedef int:1 FLAG;たが、エラーが発生しました。それを行う方法はありますか? ありがとう

4

1 に答える 1

11

いいえ。

Cプログラムでアドレス指定可能な最小の「もの」は、バイトまたはchar.
Acharは少なくとも 8 ビット長です。
したがって、8 ビット未満の型 (または任意の型のオブジェクト) を持つことはできません。

あなたができることは、オブジェクトが少なくとも a と同じ数のビットを占有し、charほとんどのビットを無視する型を持つことです

#include <limits.h>
#include <stdio.h>

struct OneBit {
    unsigned int value:1;
};
typedef struct OneBit onebit;

int main(void) {
    onebit x;
    x.value = 1;
    x.value++;
    printf("1 incremented is %u\n", x.value);
    printf("each object of type 'onebit' needs %d bytes (%d bits)\n",
          (int)sizeof x, CHAR_BIT * (int)sizeof x);
    return 0;
}

上記のコードがideoneで実行されているのを確認できます。

于 2013-01-26T12:06:13.233 に答える