本文主要是介绍数值、位域的内存表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数值、位域的内存表示
#include <stdio.h>
#include <string.h>void see(char*p, int size);struct weiyu
{int f1 : 1;int f2 : 2;int f3 : 3;int f4 : 4;int f5 : 5;int f6 : 6;int f7 : 7;int f8 : 8;int f9 : 9;int f10 : 10;
};
void testwy()
{printf("位域的内存表示 值为0的位即是字段在内存中占用的空间\n");printf("sizeof(weiyu)=%d\n",sizeof(struct weiyu));struct weiyu wy1;memset(&wy1, 0xff, sizeof(wy1));wy1.f1 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f2 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f3 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f4 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f5 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f6 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f7 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f8 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f9 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f10 = 0;see((char *)&wy1, sizeof(wy1));}void binarryStr(char c, char str[9]){for (size_t i = 0; i < 8; i++){str[7 - i] = (c & 1 == 1) ? '1' : '0';c = c >> 1;}
}void see(char*p, int size)
{for (int i = 0; i<size; i++){char c = *(p + i) ;char str[9] = { 0 };binarryStr(c, str);printf("%s ", str);}printf("\n");
}void testshuzhi()
{printf("数值的内存表示0 ~ 3,0xff-2 ~ 0xff+4 \n");for (size_t i = 0; i < 4; i = i+1){see((char *)&i, 4);}printf("\n");for (size_t i = 0xff-2; i < 0xff+4; i = i + 1){see((char *)&i, 4);}
}
int main()
{testwy();printf("\n");testshuzhi();return 0;
}
注意:
1,大端模式:高字节在内存的低地址中。假设内存地址从左往右升高,则高字节在左边,简单记为大端模式大数在前,小端模式大数在后。
2,小端模式下,第一比特位在第一字节最后一位,以此往前递推,直至本字节用完,再从第二字节第一比特位开始。
3,位域占用的比特位顺序与数值的比特位顺序相同。
这篇关于数值、位域的内存表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!