sizeof(2.5)等于什么?

时间:2016-01-15 02:45:17

标签: c language-lawyer sizeof

考试问题是:

  

Q2:sizeof(2.5)等于____。

     

A.1

     

B.2

     

C.3

     

D.4

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

但是,在大多数情况下,CHAR_BIT为8,答案应为8,但纸上未列出8!

在考试/面试中被问到如此荒谬的问题时,我应该回答什么?

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

3 个答案:

答案 0 :(得分:10)

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

如果这是口试,你可以向考官解释,并且鉴于你已经知道多少,应该得到一个非常好的标记。 (顺便说一下IEEE-754 标准强制要求,但是double的非常常见的实现。)

如果是书面考试,您无法给出进一步的解释(边际空间过于模糊),您应该选择4,原因如下:

  • 审查员可能会错误地假设2.5float,并且还错误地假定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计算机。

答案 1 :(得分:2)

form_extra_fields = { 'password2': PasswordField('Password') } 将以字节为单位生成sizeof(2.5)的大小 - 这是实现定义的。

来自标准:

  

5.3.3尺寸
  sizeof运算符产生其操作数的对象表示中的字节数   sizeof的结果   应用于任何其他基本类型(3.9.1)是实现定义的。

答案 2 :(得分:1)

sizeof返回chars中的大小,而不是位。因此,例如,sizeof(char)按定义1

但是,这个问题编写得不是很好,因为它是系统特定的。我的猜测是您系统上sizeof的{​​{1}}是double,自8 ==``之后它将是64位(假设(8 * CHAR_BIT)的公共值为CHAR_BIT)。