位域(是表示二进制的位)
使用位域是
节省内存
的一种操作,它能是int
不用占用4字节的空间
虽然现在的机器都是 8G、16G
的,但是在单片机的寸土寸金的内存
上,还是需要对内存占用
进行自定义的控制
位的大小:8 位 构成 1 字节。1 byte (字节)= 8 bit(位);
字节的大小:1024字节 等于 1 KB。 1 KB = 1024 B(字节);
// 位域的定义是在结构体里 struct ToDay { unsigned int mouth:3; // 在成员名后加 冒号:位的大小 undigned int day:2; };
位于的使用
#include <stdio.h> struct ToDay { unsigned int mouth:3; // 在成员名后加 冒号:位的大小 unsigned int day:2; } toDay; int main(void){ toDay.mouth = 8; toDay.day = 3; printf("size of toDay:%d\n",sizeof(toDay)); printf("toDay.mouth = %d\n",toDay.mouth); printf("toDay.day = %d\n",toDay.day); return 0; }
位操作
位操作时对二进制位 进行 一元和二元操作逻辑操作
在许多古老的微处理器上, 位运算比加减运算略快
, 通常位运算比乘除法运算要快很多
在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。
运算符 | 含义 | 优先级 | 举例 | 说明 |
---|---|---|---|---|
~ |
按位取反 |
高 | ~a |
如果 a 为 1 ,则 ~a 为 0 ;如果 a 为 0 ,则 ~a 为 1 ; |
& |
按位取与 |
中 | a&b |
只有 a b 同时为 1 ,结果才为 1 ;只要 a b 其中一个为 0 ,结果就为 0 ; |
^ |
按位取异或 |
低 | a^b |
如果 a b 不同 ,则 结果为 1 ;如果 a b 相同 ,则 结果为 0 ; |
| | 按位取或 |
最低 | a|b | 如果 a b 其中一个为 1 ,则 结果 为 1 ;如果 a b 同时为 0 ,则 结果为 0 ; |
按位取反(~)
~000000 => 111111
按位取与(&)
001010 & 010110 => 000010
按位取异或(^)
010110 ^ 011001 => 001111
按位取或(|)
010011 | 100110 => 110111
下一篇
【C语言】枚举类型
【C语言】枚举类型
版权声明:《 【C语言】位域 & 位操作 》为明妃原创文章,转载请注明出处!
最后编辑:2021-1-15 02:01:47