请问一个关于位域的有关问题
请教一个关于位域的问题
我定义了一个结构体:
为什么我的 sizeof(PSACC) 不是2而是4呢?
就算考虑到字节的内存对齐,那么 PSACC ps[2]; sizeof(ps2) 为什么不是4,而是8呢?
现在比较急,和硬件连调的,麻烦知道的高手能够指点一下。
谢谢!!
------解决方案--------------------
你要是想要2,你就这么写
我定义了一个结构体:
// 移相衰减控制码 [ Phase shift attenuation control code ]
struct PSACC
{
unsigned int atten8_0 : 1; // 衰减量 8.0 dB
unsigned int atten4_0 : 1; // 衰减量 4.0 dB
unsigned int atten2_0 : 1; // 衰减量 2.0 dB
unsigned int atten1_0 : 1; // 衰减量 1.0 dB
unsigned int atten0_5 : 1; // 衰减量 0.5 dB
unsigned int psa90_00 : 1; // 移相器角度 90 度
unsigned int psa22_50 : 1; // 移相器角度 22.5 度
unsigned int psa11_25 : 1; // 移相器角度 11.25 度
unsigned int psa5_625 : 1; // 移相器角度 5.625 度
unsigned int psa45_00 : 1; // 移相器角度 45 度
unsigned int psa180_0 : 1; // 移相器角度 180 度
unsigned int control : 1; // 0:发射 1:接收
unsigned int : 4 // 字节对齐
};
为什么我的 sizeof(PSACC) 不是2而是4呢?
就算考虑到字节的内存对齐,那么 PSACC ps[2]; sizeof(ps2) 为什么不是4,而是8呢?
现在比较急,和硬件连调的,麻烦知道的高手能够指点一下。
谢谢!!
------解决方案--------------------
你要是想要2,你就这么写
struct PSACC
{
unsigned char atten8_0 : 1; // 衰减量 8.0 dB
unsigned char atten4_0 : 1; // 衰减量 4.0 dB
unsigned char atten2_0 : 1; // 衰减量 2.0 dB
unsigned char atten1_0 : 1; // 衰减量 1.0 dB
unsigned char atten0_5 : 1; // 衰减量 0.5 dB
unsigned char psa90_00 : 1; // 移相器角度 90 度
unsigned char psa22_50 : 1; // 移相器角度 22.5 度
unsigned char psa11_25 : 1; // 移相器角度 11.25 度
unsigned char psa5_625 : 1; // 移相器角度 5.625 度
unsigned char psa45_00 : 1; // 移相器角度 45 度
unsigned char psa180_0 : 1; // 移相器角度 180 度
unsigned char control : 1; // 0:发射 1:接收
unsigned char : 4 ; // 字节对齐
};