C语言中bool是占用1字节吗?如果只占用一位怎么做呢?

pascal中有用一位表示bool型,C中位字段不知行不行

需要准备的材料分别有:电脑、C语言编译器。

1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。

2、在test.cpp文件中,输入C语言代码:bool a;printf("%d", sizeof(a));。

3、编译器运行test.cpp文件,此时成功打印出了bool类型的字节数是1。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-13

在C语言中,并没有bool类型,如果出现bool类型,那么就是自定义类型,根据定义方式,可能占用不同空间,可以通过输出sizeof(bool)的方式确定。

在C++中是存在bool系统类型的,同样可以通过输出sizeof(bool)的方式,来确定其占用字节数。在C++中,sizeof(bool)的值为1,所以该类型是占用1字节的。

之所以不实现为一位,是因为计算机存取的最小空间是按字节计算的,在独立的单个bool型变量下,只占一位空间并没有实际意义。

当出现一组bool类型时,通过结构体的位域概念,可以实现单独占用一位。

struct TEST
{
    bool a:1;
    bool b:1;
    bool c:1;
    bool d:1;
    bool e:1;
    bool f:1;
    bool g:1;
    bool h:1;
};

在这个例子中,定义了8个bool型成员在一个结构体TEST中,成员变量名后的:1代表该成员仅占用1位,这样整个结构体共占用一个字节。

使用位域定义时,bool变量的赋值,引用等操作,与普通bool变量并没有区别,但成员变量不支持取地址操作,这是因为,地址的单位同样是字节,对于位为单位的成员,取字节为单位的地址是没有意义的。于是C/C++在编译的时候就禁止了该操作。

第2个回答  2009-08-14
如果您使用的是vc
对bool的定义是
typedef int BOOL;
可见是占四个字节
为什么要这样呢
int型变量所占的空间永远是与操作系统有关的,在32位的操作系统中int型占4个字节,所以CPU在执行指令时从内存中取数据也是一次最少取4个字节,如果BOOL占一个字节的话,CPU就要先取4个字节,再用“与”运算与掉三个字节,这样效率就低了

您要是想控制一位 没有对应的数据类型 一般通过位运算和位操作来完成
第3个回答  2009-08-14
c中bool占一个字节,如果想只占用一位,可以参考:

typedef struct abc
{
bool m_a :1;
bool m_b :1;

}ABC;
在这个struct种,两个bool成员各只占用1bit。
第4个回答  2009-08-14
C语言最小的占用单位就是1字节 怎么可能一位
哪怕你打1 0也都要占用1个字节
相似回答