首页 > 其他分享 >C语言`union`及`位域`

C语言`union`及`位域`

时间:2022-08-16 17:57:35浏览次数:68  
标签:变量 union 32 C语言 inst 位域

C语言union位域

1.union

union就相当于一个类型不固定的变量,存储大小由union内最长的变量决定,存储空间共享,访问内部不同的变量,就会以相应的变量规范对内存进行解析,以如下union为例

typedef union{
    uint32_t v1;
    int32_t v2;
} uni;

uni总长度32位,令uni.v2 = -1,此时uni就是32个1组成的变量,此时v1 = \(2^{32}-1\),如果添加了其他类型变量,比如float,那就会用float的规范解析32个1

2.位域

有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言提供了位域.位域按照从低位到高位的顺序进行解析。

typedef union {
  struct { uint8_t rs : 2, rt : 2, op : 4; } rtype;
  struct { uint8_t addr : 4      , op : 4; } mtype;
  uint8_t inst;
} inst_t;

inst_t.inst = 0b11100110;

因为union内所有变量共享内存,因此不仅inst被复制,其他两个变量也被赋值,此时inst_t.rtype.rs = 10,rt = 01,op = 1110

标签:变量,union,32,C语言,inst,位域
From: https://www.cnblogs.com/INnoVationv2/p/16592392.html

相关文章