基本上我想创建一个数据类型uint1_t
。那有可能吗?
我知道布尔数据类型的大小是一个字节。但是布尔值只需要一位。那么,C基本上只对布尔使用一位吗?如果是,那么它与其他七个有什么关系。在一个位足够的情况下使用八个位似乎浪费了空间。
实际上不可能创建占用一位的类型。C中最小的可寻址单元是char
(根据定义,它为1个字节,通常但不一定是8位长;它可能更长,但不允许比标准C中的8位短)。
您可以使用:
typedef _Bool uint1_t;
要么:
#include <stdbool.h>
typedef bool uint1_t;
但即使布尔变量仅存储值0或1false
或,它也将占用(至少)一个字节true
。
原则上,您可以使用位字段:
typedef struct
{
unsigned int x : 1;
} uint1_t;
但这也将占用至少一个字节(可能与一个字节一样多unsigned int
;通常为4个字节),您将需要使用它.x
来访问该值。位域的使用是有问题的(它们的大多数方面是实现定义的,例如保存它的存储单元将占用多少空间)—不要使用位域。
包括Drew McGowen,Drax和Fiddling Bits建议的修正。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句