这个是在知乎上看到的问题,分享给大家,如果有不同的答案,欢迎评论回复。
知乎惯例
谢邀
人在厕所,刚刚蹲下
因为最近都流行长文,但是作为日更而且更喜欢表达自己看法的我,力争文章是自己想发的,而且是有点作用的。
#include "stdio.h" #include "stdbool.h" struct boolStr{ char bit0:1; char bit1:1; char bit2:1; char bit3:1; char bit4:1; char bit5:1; char bit6:1; char bit7:1; }; int main(void) { struct boolStr bitStr; char temp = 0; bitStr.bit0 = 1; bitStr.bit4 = 1; temp = *(char *)&bitStr; printf("size:%d %d\n",sizeof(bitStr),sizeof(temp)); printf("temp:0x%x\n",temp); return (0); }
输出
#include "stdio.h" #include "stdbool.h" int main(void) { bool barray[8]; char temp = 0; printf("size:%d %d\n",sizeof(barray),sizeof(temp)); printf("temp:0x%x\n",temp); return (0); }
输出
得出来的sizeof(8*bool) = 8 而不是 1 我们默认的最小存储单元是 8bit,一个char字节。所以你要控制每一个bit是需要点技巧的。
这样的用法在单片机里面非常多,不知道你们写程序的时候有没有用到标志位,我们写标志位的时候,是用bool变量,但是实际上bool变量在占用的是一个字节的。
有了这样的问题,我们就需要想出一个解决办法,用一个bit来做判断,按照我上面的写法,占用的内存直接降低几个等级。
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
嵌入式Linux
微信扫描二维码,关注我的公众号