找回密码
 注册
关于网站域名变更的通知
查看: 284|回复: 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 {7 C! C. J# p! ]0 e5 V
    //    u32 Dat : 23;
      |/ W4 k& Y$ U//    u32 S : 1;
      z8 V5 B- w4 h% G    u8 Dat0;
    & @, e. z' E8 J1 p0 q! H    u8 Dat1;
    7 d3 F* R" h" q4 H# V    u8 Dat2 : 7;
    ( p! g! K' S9 k    u8 S : 1;            
    & h' ~% v9 z1 T} sDF09;

    2 u! w5 Z( }3 V

    该用户从未签到

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

    [LV.1]初来乍到

    3#
    发表于 2022-5-5 10:33 | 只看该作者
    就是这一个变量占这个变量类型的几位。
    9 C* a( q( k2 D7 y3 z+ P8 @2 Ju32 Dat:23,Dat占32位中的23位。

    该用户从未签到

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

    该用户从未签到

    5#
    发表于 2022-5-5 10:47 | 只看该作者
    位域操作。
    ( Q% S- j; s. c2 }- ]优点:方便位操作。7 r$ [' x6 N9 J5 ^2 |9 `
    普通情况下C语言的最小的数据类型位char, 也就是一个字节,如果要该字节中的位进行操作,需要进行移位, 然后进位或 位与等位操作,用起来比较麻烦。所以C语言增加了位域语法,可以给每一个位域增加一个名字,方便操作。  p8 x2 V0 n- f, f$ H+ b4 Q
    例如
      M# E3 G% O4 }% t5 otypedef
    # q1 d  H4 g" j' |{
    2 k9 N0 _$ m0 \7 K0 P2 B( X    uint8_t  power_valid :1;
    " A$ D9 i/ ]+ F. c    uint8_t  power_mode :4;
    ( y" W  Z- c# Z1 m) F( Y$ L    uint8_t  gear_position :3;
    5 V+ M  r0 j4 y" t}status_t;: F! {; {8 H9 _
    缺点:降低移植性,一旦芯片位序不同,就需要对所有位域定义进行调整5 O! Q8 E: i) ^" X
    位序是对于位排列方式的定义,分为MSB(Most Significant Bit)和LSB(Most Significant Bit),即先放最高位(位顺序由高到低) 还是最低位(位顺序由低到高)。例如对于一个物理内存中字节如果其值为二进制 1000 0000,MSB会将其解释为 0x80, LSB会将其解释为0x01。如果直接使用移位、位与、位或等运算符进行操作,则不会出现这个问题。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-10 15:26 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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