我可以用比特来定义C元素的大小吗?

时间:2014-03-24 21:44:25

标签: c

在下面的示例中,我可以用位定义C元素的大小吗?

#include <stdio.h>

typedef enum {
    false = 0,
    true = ~0
} bool;

int main(void) {
    bool x;
    printf("%d", sizeof x);
    return 0;
}

2 个答案:

答案 0 :(得分:6)

一般来说,没有。最小可寻址单位是一个字节,而不是一个字节。

你可以使用bitfields做有趣的事情,例如:

struct {
    unsigned a : 31;
    unsigned b : 1;
};

该结构可能一个sizeof == 4a将使用31位空间,b将使用1位空间。

答案 1 :(得分:0)

enum是int大小。我需要做的就是使隐式转换显式化。

#include <stdio.h>

typedef enum {
    true = ~(int)0,
    false = (int)0
} bool;

int main(void) {
    return false;
}