You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

unsigned short与匿名位域联合的初始化截断差异问题

问题原因解析

这是C语言聚合类型初始化规则导致的差异:当用大括号初始化union时,编译器会优先初始化union中第一个声明的成员。

  • 对于v1_t,它的第一个成员是匿名位域结构体,而结构体的第一个成员是4位的d1。所以v1_t v1 {256};会被解析为给d1赋值。由于d1仅占4位,256的二进制是100000000,截断到4位后就是0000,最终d1的值为0,整个union的data也随之变为0。
  • 对于v2_t,它的第一个成员是unsigned short data,所以v2_t v2 {256};直接给data赋值256,位域成员会对应这个值的位分布,表现符合预期。

本质上,union的初始化目标由声明时的成员顺序决定,和你期望赋值的成员无关——v1_t的初始化逻辑优先匹配了第一个成员(匿名结构体的d1),而非data。

内容的提问来源于stack exchange,提问作者deponovo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:42:34