【C语言】位域 & 位操作 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新位域(是表示二进制的位)
使用位域是
节省内存
的一种操作,它能是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
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}