{{format('0')}} {{format('663')}} {{format('1584')}}

【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;
}

[mark]()

位操作

位操作时对二进制位 进行 一元和二元操作逻辑操作

在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多

在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。

运算符 含义 优先级 举例 说明
~ 按位取 ~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  
评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12522')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9410')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7405')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4879')}}人已阅读

目录

标签云

C语言

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏