首页 > 代码库 > 结构体里的“位域”(bit-field)结构
结构体里的“位域”(bit-field)结构
首先看一个题目:
1 #include <iostream> 2 using namespace std; 3 #include <string.h> 4 typedef struct AA{ 5 int b1:5;//第一个字节的低5位,即b0:b4 6 int b2:2;//b5:b2 7 }AA; 8 9 int main(int argc, char** argv) {10 AA aa;11 char cc[100];12 strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");13 memcpy(&aa,&cc,sizeof(AA));14 cout<<aa.b1<<endl;15 cout<<aa.b2<<endl;16 return 0;17 }
请问,上述代码的输出结果? 答案是-16,1.
第12行,将字符串“0123456789abcdefghijklmnopqrstuvwxyz”赋给字符数组cc.第13行,将大小为sizeof(AA),也就是4个字节(因为只定义了一个int型)的数据赋给aa指向的内存空间。因为cc的前4个字节数据为“0123”,也就是0x30313233,所以aa指向的内存空间的前4个字节数据即为0x30313233,其中第一个字节的二进制为:00110000.而aa.b1是第一个字节的低5位,即10000(-16),同理aa.b2是01(1)
现将上述代码的第11、12行改为:
int cc=0x30313233;
那么,上述代码的输出结果为?答案是-13,1.(在x86平台下)
这是为什么呢?因为x86是小端存储,在执行第13行拷贝的时候,是先将int cc的低位字节的数据拷贝到aa里,所以aa的前4个字节为:0x33323130,其第一个字节为00110011.
结构体里的“位域”(bit-field)结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。