分析c语言程序---结构体程序
发布网友
发布时间:2022-04-19 00:29
我来回答
共3个回答
热心网友
时间:2022-04-19 01:58
union是用来定义联合体的关键字,union维护足够的空间来置放多个资料成员中的最大的“一种”,而不是为每一个资料成员配置空间,在union中所有的资料成员共用一个空间,同时间只能储存其中一个成员的资料。
可以得出该共用体在内存中占用4个字节。
k.a[0]=10000; k.a[1]=15000; 为k的int a[2]成员赋值,即该内存的内容是[00111010] [10011000] [00100111] [00010000]将这4个字节换算成符点数就是0.001161.
scanf ("%s",k.d); //k.d[]="abcd"
因为scanf把4个输入压栈后再出栈对4个字符变量赋制值,则内存结构为:
[01100100] [01100011] [01100010] [01100001]
d[3] d[2] d[1] d[0]
c(4个字节)
b(前两个字节)
a[1](前两个字节) a[0](后两个字节)
将这4个字节换算成符点数c就是:16777999408082104400000.000000.
至于上面的数字是怎么得来的,那要考虑浮点数在计算机中的储存结构问题了.在存储1个浮点数的32位内存中,
第一位是符号位,下来的8位是指数位,后面的23位是尾数位.
[01100100] [01100011] [01100010] [01100001]
换算成浮点数的算法是:
第一位为0:正数
下来的8位是:[11001000],减去[01111111]为[1001001].所以指数为73
再下来的23位是1100011[01100010] [01100001].所以尾数为
(1.11000110110001001100001)B = 2^0+2^(-1)+2^(-1)+2^(-6)+2^(-7)+2^(-9)+2^(-10)+2^(-14)+2^(-17)+2^(-18)+2^(-23).
最后结果=底数^指数
可能你还会问为什么位数一样,结果还是有差距,那是因为浮点数的计算精度问题.浮点数的精度是有限的.
热心网友
时间:2022-04-19 03:16
这是一个联合体,自己多找些相关的资料看看吧。