找回密码
 注册
关于网站域名变更的通知
查看: 310|回复: 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 {
    " F7 U& ?# ~2 U1 K8 Q//    u32 Dat : 23;# N8 b- l. D! V( @1 c3 U
    //    u32 S : 1;
    0 p" ^. H. [+ j3 v5 l* c# [) q    u8 Dat0;
    5 L! ^% o& S$ R0 o0 w& x! `; \8 L    u8 Dat1;
    & x' q2 j# I3 Z, S' p, P    u8 Dat2 : 7;0 N0 [2 A( ~8 r8 ]
        u8 S : 1;            ( @  F" S3 _: A& i+ }7 @
    } sDF09;


    / M$ z4 u# l9 C, F

    该用户从未签到

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

    [LV.1]初来乍到

    3#
    发表于 2022-5-5 10:33 | 只看该作者
    就是这一个变量占这个变量类型的几位。
    0 w9 c" j, Y2 ]$ ?u32 Dat:23,Dat占32位中的23位。

    该用户从未签到

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

    该用户从未签到

    5#
    发表于 2022-5-5 10:47 | 只看该作者
    位域操作。" U8 G4 y3 z8 e% v" N( z; F! Y+ m
    优点:方便位操作。
    / g8 ]1 x( Q! \9 E' m- S普通情况下C语言的最小的数据类型位char, 也就是一个字节,如果要该字节中的位进行操作,需要进行移位, 然后进位或 位与等位操作,用起来比较麻烦。所以C语言增加了位域语法,可以给每一个位域增加一个名字,方便操作。
    0 l' G+ X4 o$ ~  Y) E例如
    ; w" i0 P) {8 itypedef 9 K( h- W. b: _7 D
    {2 f. v, q* J. v* p% I* c
        uint8_t  power_valid :1;* G$ e4 w" Y+ b6 B! J+ P
        uint8_t  power_mode :4;
    7 B3 @* H; K) u: v* K    uint8_t  gear_position :3;
    , ]  W4 C+ `  @: H- x; X* X" b}status_t;
    ( M6 N" ]# b6 f2 @" A: s  F; p# [9 L缺点:降低移植性,一旦芯片位序不同,就需要对所有位域定义进行调整" N# n- }0 @' Q0 ~8 C; i  b; {6 q( H+ I
    位序是对于位排列方式的定义,分为MSB(Most Significant Bit)和LSB(Most Significant Bit),即先放最高位(位顺序由高到低) 还是最低位(位顺序由低到高)。例如对于一个物理内存中字节如果其值为二进制 1000 0000,MSB会将其解释为 0x80, LSB会将其解释为0x01。如果直接使用移位、位与、位或等运算符进行操作,则不会出现这个问题。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-9 03:24 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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