对内存有了进一步理解!
2009-12-31 19:32
225 查看
#include <stdio.h>
union data
{
int i[2];
float a;
long b;
char c[4];
}u;
void main( )
{
scanf("%d%d",&u.i[0],&u.i[1]);
printf("I[0]=%d,I[1]=%d a=%f b=%ld c[0]=%d c[1]=%d c[2]=%d c[3]=%d",u.i[0], u.i[1],u.a,u.b,u.c[0], u.c[1], u.c[2], u.c[3]);
}
首先:共用体有8个字节的长度,用高4个字节、低4个字节来说明。
1.scanf("%d%d",&u.i[0],&u.i[1]); 输入10000 20000后,低4个字节内放10000,高4个字节放20000
转化为2进制是:00000000 00000100 00010100 00100000 00000000 00000000 00100111 00010000
I[0]=10000,I[1]=20000就不用说了。
2.看a的值:单精度float(4个字节)在内存中存储方式:31位是符号位 30--23位是指数位 22--0位是小数位(详细看C语言标准与设计),printf(“%f”,u.a),读内存的低4个字节,值应该是 2e(-126)(1.0000000 00100111 00010000b)由于float有效数字是6--7位,所以7位后面的没有意义所以a = 0.000000.
3.看b的值:long是长整型,存储方式与int相同,printf(“%ld”,u.b);按long的形式读低4个字节,所以b = 10000;
4.看字符数组c[4]的值: 首先,最好printf(“%d”,u.c[i]);用十进制比较清晰。
c[0]:占内存中最低的字节(最低的8位)就是:00010000转化为十进制是 16.
c[1]:占内存中次低的字节(次低的8位)就是:00100111转化为十进制是 39.
c[2]c[3]同理均为0.
union data
{
int i[2];
float a;
long b;
char c[4];
}u;
void main( )
{
scanf("%d%d",&u.i[0],&u.i[1]);
printf("I[0]=%d,I[1]=%d a=%f b=%ld c[0]=%d c[1]=%d c[2]=%d c[3]=%d",u.i[0], u.i[1],u.a,u.b,u.c[0], u.c[1], u.c[2], u.c[3]);
}
首先:共用体有8个字节的长度,用高4个字节、低4个字节来说明。
1.scanf("%d%d",&u.i[0],&u.i[1]); 输入10000 20000后,低4个字节内放10000,高4个字节放20000
转化为2进制是:00000000 00000100 00010100 00100000 00000000 00000000 00100111 00010000
I[0]=10000,I[1]=20000就不用说了。
2.看a的值:单精度float(4个字节)在内存中存储方式:31位是符号位 30--23位是指数位 22--0位是小数位(详细看C语言标准与设计),printf(“%f”,u.a),读内存的低4个字节,值应该是 2e(-126)(1.0000000 00100111 00010000b)由于float有效数字是6--7位,所以7位后面的没有意义所以a = 0.000000.
3.看b的值:long是长整型,存储方式与int相同,printf(“%ld”,u.b);按long的形式读低4个字节,所以b = 10000;
4.看字符数组c[4]的值: 首先,最好printf(“%d”,u.c[i]);用十进制比较清晰。
c[0]:占内存中最低的字节(最低的8位)就是:00010000转化为十进制是 16.
c[1]:占内存中次低的字节(次低的8位)就是:00100111转化为十进制是 39.
c[2]c[3]同理均为0.
相关文章推荐
- 对内存机制进一步理解
- 理解并解决IE的内存泄漏方式[
- 对java 内存可见性的理解
- 对于JVM的内存模型的理解
- 【资料整理】对linux内存的理解
- memcached全面剖析–2.理解memcached的内存存储
- 理解JVM如何使用Windows和Linux上的本机内存
- const的进一步理解~
- 理解 Android 本地数据存储 API--利用首选项、SQLite 和内部及外部内存 API
- 自己的理解:堆,栈及变量在内存中的分布
- [课本划重点]深入理解jvm-第3章 垃圾收集器与内存分配策略(1)
- Java内存泄露的理解与解决
- [Java]理解JVM之一:JVM内存区域
- 深入理解JVM(四)——对象内存的分配策略
- 浮点数在内存中的表示移位存储难点的理解
- JVM--第二章--深入理解对象的创建、内存布局、访问定位
- 理解 JVM 如何使用 Windows 和 Linux 上的本机内存
- 深入理解计算机系统-之-内存寻址(二)--存储保护机制(CPU实模式与保护模式)
- C++(三) 对内存中堆、栈、静态存储区的理解
- 第2章 Java内存区域与内存溢出异常--《深入理解 Java 虚拟机》笔记