位域有关问题
位域问题
经过strcpy和memcpy后,aa的4个字节所存放的值是:
0,1,2,3的ASC码,即00110000,00110001,00110010,00110011 (这是在内存中的排序顺,地址一次增加)
所以,最后一步:显示的是这4个字节的前5位,和之后的2位
分别为:10000,和01 ,为什么前5位是10000?
------解决方案--------------------
00110000,低5位10000,然后两位是01,有什么问题?
------解决方案--------------------
前5位,即第一个字节的前5位。 从右往左5为,整合10000
- C/C++ code
#include <stdio.h> #include <string.h> typedef struct AA { int b1:5; int b2:2; }AA; int main(void) { AA aa; char cc[100]; strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz"); memcpy(&aa, cc, sizeof(AA)); printf("%d %d\n",aa.b1, aa.b2); return 0; }
经过strcpy和memcpy后,aa的4个字节所存放的值是:
0,1,2,3的ASC码,即00110000,00110001,00110010,00110011 (这是在内存中的排序顺,地址一次增加)
所以,最后一步:显示的是这4个字节的前5位,和之后的2位
分别为:10000,和01 ,为什么前5位是10000?
------解决方案--------------------
00110000,低5位10000,然后两位是01,有什么问题?
------解决方案--------------------
前5位,即第一个字节的前5位。 从右往左5为,整合10000