C语言。答案选的D.可是D哪里错了?

2025-05-12 02:57:34
推荐回答(5个)
回答1:

好吧,说那么多,你看不懂。
其实主要原因就是因为浮点型和整型在内存中的存储方式不一样。
整型从低位到高位依次存储,但是浮点型的存储并不是这样的。
所以d是错的。

回答2:

ABC都是正确的,那么就不解释了。
关于D选项,demo.d1赋值99。由于我们已经知道union的特征是内存共用,也就是B选项所描述的,同时float和int都是占4个内存字节数。
在上面的铺垫下,我这样描述:
在计算机中,浮点数的存储和整形数据存储方式是不一样的,浮点数存储方式如一楼回答那般比较复杂,在计算机组成原理课程会学习。他们在内存中的存储规则不一样,如下举例。
整形99换算成16进制在内存储存,其值是 0x 00 00 00 63。
浮点型99.0换算成16进制在内存储存,其值是 0x 42 C6 00 00。
所以可以说,16进制数 0x 00 00 00 63换算成十进制浮点数绝对不是99.0。
至于0x 00 00 00 63换算成十进制浮点数是什么我也没有计算过,主要是我不记得了,我用编译器输出的结果是0.000000。我觉得也不需要纠结这个了。
还有疑问再追问吧

回答3:

选d,因为int和float的占用大小是一样的,但是存的方式不一样,于是共同体用int存再用float取的话,值是一个按整形存的0和1的值,按浮点取,因为两种类型的机制不一样,所以一般取不出99.0,而是一个系统机制决定的值。

回答4:

demo.d2没有赋值它的值未知,而D选项说demo.2的值是99.0
还有其他疑问吗?

回答5:

什么是union你还不清楚。用sizeof()就知道原因了。