sizeof(2.5) 等于什么?

What is sizeof(2.5) equal to?

试题是:

Q2: sizeof(2.5) is equal to ____.

A.1

B.2

C.3

D.4

没有f l F L这样的后缀,所以浮点常量(2.5)是double类型。由于没有指定其他内容,我想它的值是未指定的。例如,在某些 CHAR_BIT 为 32(可能导致 sizeof (char)==sizeof (long))的实现中,答案可以是 B.

然而,在大多数情况下,CHAR_BIT是8,答案应该是8,但8并没有列在试卷上!

exam/interview被问到这么荒唐的问题,我该怎么回答?

PS: 请忽略这些无用的括号:) PPS: IEEE 754 是否被标准授予?

sizeof returns chars 中的大小,而不是位。因此,例如,sizeof(char) 根据定义 1.

但是,这个问题写得不是很好,因为它是系统特定的。我 猜测 是你系统上 doublesizeof8,这将是 64 位的,因为 (8 * CHAR_BIT) = = ``(假设 CHAR_BIT 的公共值为 8)。

sizeof(2.5) 将产生 double 的大小(以字节为单位)——这是实现定义的。

来自标准:

5.3.3 Sizeof
The sizeof operator yields the number of bytes in the object representation of its operand.
The result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined.

这个问题不一致:sizeof(2.5) 是实现定义的。没有额外的上下文,无法确定选择哪个答案。

如果这是口试,你可以向考官解释这一点,考虑到你已经知道了多少,应该会得到很好的分数。 (顺便说一句,IEEE-754 不是 标准强制要求的,而是 double 的一个非常常见的实现)。

如果是笔试,你不能给出进一步的解释(边缘space太稀疏),你应该select 4,原因如下:

  • 考官可能错误地假设 2.5 是一个 float,并且还错误地假设 float 总是 32 位,进一步错误地假设字节是8 位。这是最可能的解释。如果你认为自己比考官更了解,那么在口试中要小心保持谦虚,这里可能就是这种情况。

  • 问题可能拼写错误,例如 sizeof("2.5") 但缺少 "。对于这道题,答案肯定是4,用C的答案来糊弄学生是有道理的。

  • 问题可能拼写错误,例如 sizeof('2.5') 但缺少 '。对于这个 非常 丑陋的问题,答案与 sizeof(int) 相同,通常在具有 8 位字节的系统上 4。请注意 sizeof(2,5) 也与 sizeof(int) 相同,但这也是一个技巧问题。

  • 在某些 double 是 64 位而 char 是 16 位的 DSP 系统上,答案 4 是正确的。

  • 其他答案更不可能是正确的,当然 DS9K 电脑除外。