在c语言中我们知道有(_Bool)
类型是1个字节。也可以使用这种结构创建自己的布尔类型
typedef struct { char value : 1; } boolean_t;
并像这样称呼它
boolean_t var1;
var1.value = 0;
但我不想使用(.value
)而只是这样做
var 1 = 0;
喜欢(_Bool)
类型(没有用于插入值的变量调用内的结构)我想要这样的东西
boolean_t var1;
var1 = 0;
我该怎么做?
答案 0 :(得分:0)
在C中,布尔值可以用变量表示,变量可以是0(假)或不是0(真)。你可以使用像这样的unsigned char:
typedef unsigned char boolean_t;
boolean_t myBool = 0; // or myBool = 1
答案 1 :(得分:0)
不可能实现你想要的(我的意思是你不能拥有只有1位长的数据类型,并且可以与赋值=
一起使用)。你展示的那个 - 也将至少占用1个字节的内存。同样使用签名,您使用0
和-1
来限制自己0
和1
使用无符号。 c中byte
的最小可寻址单元不可能具有占用小于一个字节的空间的数据类型。 (同样适用于_Bool
)。
再次在这里你可以简单地使用uint8_t
来实现同样的目的。 uint8_t v = 1; //denotes true and so on
。
答案 2 :(得分:0)
将结构用于布尔类型会很奇怪。很多事情可以用你的boolean_t
工作,确保内部值只能是0或1,因为位域,从两个const值分配一个布尔值为true和false,可能更多。
但是在C中,结构不能从整数值中分配,也不能用作整数表达式。这意味着至少有两件事是不可能的:
boolean b;
b = (1 < 2); // error assigning to struct from incompatible type int
if (b) printf("true\n"); // error used type struct where int or pointer required
因为在C关系运算符中实际返回int值