本文主要是介绍位域和大小端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
位域和大小端
intel 小端,使用位域从低字节开始赋值,赋值内还是从高位到低位
#include <stdio.h>union{int data1;char data2;
}Endian;int BigLittle()
{Endian.data1 = 0x12345678;printf("%x \n", Endian.data2);return 0;
}typedef struct{int first:8;int second:16;int third:8;
}HighLow;int highLowTest()
{int data = 0x12345678;HighLow *pHighLow = (HighLow *)(&data);printf("%x %x %x\n",pHighLow->first,pHighLow->second,pHighLow->third);return 0;
}int main()
{BigLittle();highLowTest();printf("hello, world.\n");getchar();getchar();return 0;}
输出:
/*RC /? 5.2.3690.0*/
0x78是低字节,在低地址,小端
0x78是低字节,在低地址,赋值也从0x78开始,0x3456两个字节
猜想:
1. 位域始终是从低地址开始赋值的,得到的结果和处理器的大小端有关
0001 0010 | 0011 0100 0101 0110 | 0111 1000 |
8bit | 16bit | 8bit |
如果
typedef struct{unsigned int first:7;unsigned int second:12;unsigned int third:13;
}HighLow;
从最低地址开始数,
0001 0010 0011 0 | 100 0101 0110 0 | 111 1000 |
13bit | 12bit | 7bit |
输出: 0x78 0x8ac 0x246
红红火火 |
恍恍惚惚 |
这篇关于位域和大小端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!