找回密码
 注册
关于网站域名变更的通知
查看: 294|回复: 4
打印 上一主题 下一主题

结构体中 “ u8 Dat2 : 7; ”是个什么写法,这个什么意思?

[复制链接]
  • TA的每日心情
    开心
    2022-1-24 15:10
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2022-5-5 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x

    看下面这个程序,其中“    u8 Dat2 : 7;  ”是个什么写法,这个什么意思?结构体还能这么赋值咋滴?

    typedef struct {
    $ c' k- @( [% u5 w( J% S* u+ K- [//    u32 Dat : 23;
    : k6 G2 [9 e9 g7 S' m//    u32 S : 1;1 S! v( Q9 @# P" ]
        u8 Dat0;- R2 e9 [( l! g3 L3 U
        u8 Dat1;0 i+ F2 ~6 d5 Z7 O" ]
        u8 Dat2 : 7;
    9 y, O- Q9 {. c* o, c, w0 G    u8 S : 1;            ! O; h. t; I4 }+ c
    } sDF09;


    & |) g3 z# \8 E5 Y: M1 |

    该用户从未签到

    2#
    发表于 2022-5-5 09:53 | 只看该作者
    主要现在的MCU的空间比较大,所以很少有这么去省的,除非大工程了
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-5-5 10:33 | 只看该作者
    就是这一个变量占这个变量类型的几位。0 g2 G, y9 R& L. L$ I* C0 O2 p
    u32 Dat:23,Dat占32位中的23位。

    该用户从未签到

    4#
    发表于 2022-5-5 10:44 | 只看该作者
    就是位段,有时存储信息不需要完整字节,只需要几个二进制。这个真不常用

    该用户从未签到

    5#
    发表于 2022-5-5 10:47 | 只看该作者
    位域操作。
    & \; y6 {" ^* O+ \. x0 T% E/ u优点:方便位操作。
    ! F+ Y* |! @' N% B3 {, M普通情况下C语言的最小的数据类型位char, 也就是一个字节,如果要该字节中的位进行操作,需要进行移位, 然后进位或 位与等位操作,用起来比较麻烦。所以C语言增加了位域语法,可以给每一个位域增加一个名字,方便操作。- l* `" P7 A% A2 U
    例如* d) a5 R. v; b8 h7 h/ m' i6 c1 Q
    typedef , N& @7 m% l( P0 W( X9 ~% t
    {; U$ l9 Q* j* I4 q( A0 A
        uint8_t  power_valid :1;
    ; i- J9 d* |- c2 K5 e& T* _    uint8_t  power_mode :4;; w! _8 m! d$ g6 [* E1 R- Y
        uint8_t  gear_position :3;- a! F- q- W+ X+ @0 l
    }status_t;* r/ M4 K/ \6 F; T7 j
    缺点:降低移植性,一旦芯片位序不同,就需要对所有位域定义进行调整. A0 Q& |( r) G* Z4 x
    位序是对于位排列方式的定义,分为MSB(Most Significant Bit)和LSB(Most Significant Bit),即先放最高位(位顺序由高到低) 还是最低位(位顺序由低到高)。例如对于一个物理内存中字节如果其值为二进制 1000 0000,MSB会将其解释为 0x80, LSB会将其解释为0x01。如果直接使用移位、位与、位或等运算符进行操作,则不会出现这个问题。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-19 09:54 , Processed in 0.109375 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表