找回密码
 注册
关于网站域名变更的通知
查看: 297|回复: 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 {' y* Y; o7 L/ o5 E( @4 R
    //    u32 Dat : 23;  G2 v; P7 v( _6 U5 Q# ^4 r7 E+ ?
    //    u32 S : 1;
    * q( F8 H- [( n4 A/ ?! L7 ^    u8 Dat0;) L# u. _, O+ i9 U3 |. \' Q; C# o
        u8 Dat1;
    & W' P! d# }- A- C1 ]4 R4 }8 U0 h    u8 Dat2 : 7;/ ]. o9 Y* `' F( `0 q
        u8 S : 1;            
    4 D/ h- a6 O/ f  c" s+ }( ?4 t} sDF09;


    , E# x% E- ^3 b( r& Q* y& t; F2 T: T

    该用户从未签到

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

    [LV.1]初来乍到

    3#
    发表于 2022-5-5 10:33 | 只看该作者
    就是这一个变量占这个变量类型的几位。5 R' I1 A5 B: S# Z/ B
    u32 Dat:23,Dat占32位中的23位。

    该用户从未签到

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

    该用户从未签到

    5#
    发表于 2022-5-5 10:47 | 只看该作者
    位域操作。
    3 v5 k. T6 \. k1 n/ }0 a优点:方便位操作。
    8 d. ~. S0 {4 R4 d+ ~普通情况下C语言的最小的数据类型位char, 也就是一个字节,如果要该字节中的位进行操作,需要进行移位, 然后进位或 位与等位操作,用起来比较麻烦。所以C语言增加了位域语法,可以给每一个位域增加一个名字,方便操作。
      n' j5 z$ D9 y; a例如
    * z. F+ J" v! f, A3 s0 L/ ntypedef 6 I3 x+ l5 |; R- Z
    {
    : S9 m( H$ a9 g7 A& i; ]# a    uint8_t  power_valid :1;
    2 ?+ g7 Y+ l  r8 K' `    uint8_t  power_mode :4;
    ; K9 t; {! [  [7 B. F    uint8_t  gear_position :3;
    + B, A3 D7 G$ h; S* Y5 i; |) C& ^}status_t;# y" N) p6 R5 W0 L
    缺点:降低移植性,一旦芯片位序不同,就需要对所有位域定义进行调整
    2 p. d: O% X: S( j位序是对于位排列方式的定义,分为MSB(Most Significant Bit)和LSB(Most Significant Bit),即先放最高位(位顺序由高到低) 还是最低位(位顺序由低到高)。例如对于一个物理内存中字节如果其值为二进制 1000 0000,MSB会将其解释为 0x80, LSB会将其解释为0x01。如果直接使用移位、位与、位或等运算符进行操作,则不会出现这个问题。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-11 16:34 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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