C sizeof(2.5)等于多少?

C sizeof(2.5)等于多少?,c,language-lawyer,sizeof,C,Language Lawyer,Sizeof,一道试题是: 问题2:sizeof(2.5)等于 A.1 B.2 C.3 D.4 没有像fl这样的后缀,因此浮点常量(2.5)具有双精度类型。因为没有指定其他内容,所以我认为它的值是未指定的。例如,在一些CHAR\u位为32的实现上(可能导致sizeof(CHAR)==sizeof(long)),答案可以是B 然而,在大多数情况下,CHAR\u BIT是8,答案应该是8,但纸上没有列出8 当在考试/面试中被问到如此荒谬的问题时,我应该回答什么 请忽略这些无用的括号:) PPS:IEEE 754是

一道试题是:

问题2:
sizeof(2.5)
等于

A.1

B.2

C.3

D.4

没有像
fl
这样的后缀,因此浮点常量
(2.5)
具有双精度类型。因为没有指定其他内容,所以我认为它的值是未指定的。例如,在一些
CHAR\u位
为32的实现上(可能导致
sizeof(CHAR)==sizeof(long)
),答案可以是B

然而,在大多数情况下,
CHAR\u BIT
是8,答案应该是8,但纸上没有列出8

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

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

sizeof
返回字符大小,而不是位。例如,
sizeof(char)
根据定义是
1


然而,这个问题写得不是很好,因为它是特定于系统的。我的猜测是,您系统上的
double
sizeof
8
,这将是64位,因为
(8*CHAR\u位)
=``(假设
字符位的公共值为
8
)。

sizeof
返回的是
字符的大小,而不是位。例如,
sizeof(char)
根据定义是
1

然而,这个问题写得不是很好,因为它是特定于系统的。我的猜测是,您系统上的
double
sizeof
8
,这将是64位,因为
(8*CHAR\u位)
==```(假设
CHAR\u位的公共值为
8
)。

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

来自标准:

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

sizeof(2.5)
将以字节为单位生成一个
double
的大小,这是实现定义的

来自标准:

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


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

如果这是口试,你可以向考官解释这一点,并且根据你已经知道的内容,你应该会得到一个很好的分数。(顺便说一句,IEEE-754不是标准规定的,而是
双重
的一种非常常见的实现)

如果是笔试,您无法给出进一步解释(边距太小),您应选择
4
,原因如下:

  • 考官可能会错误地假设
    2.5
    浮点
    ,也可能错误地假设
    浮点
    始终为32位,进一步错误地假设字节为8位。这是最可能的解释。在口试中要小心,保持谦虚。如果你认为自己比主考人懂得更多,这里可能就是这样

  • 这个问题可能是拼写错误,例如
    sizeof(“2.5”)
    ,但缺少
    。对于这个问题,答案肯定是
    4
    ,尝试用
    C
    答案愚弄学生是有意义的

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

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

  • 当然,除了在
    DS9K
    计算机上,其他答案更不可能是正确的


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

如果这是口试,你可以向考官解释这一点,并且根据你已经知道的内容,你应该会得到一个很好的分数。(顺便说一句,IEEE-754不是标准强制要求的,而是非常常见的

如果是笔试,您无法给出进一步解释(边距太小),您应选择
4
,原因如下:

  • 考官可能会错误地假设
    2.5
    是一个
    float
    ,也可能错误地假设
    float
    总是32位,进一步错误地假设字节是8位。这是最有可能的解释。在口试中要小心,保持谦虚,如果你认为自己比考官知道得多,这是可能的这里的情况就是如此

  • 问题可能是拼写错误,例如
    sizeof(“2.5”)
    ,但缺少
    。对于这个问题,答案肯定是
    4
    ,尝试用
    C
    答案愚弄学生是有意义的

  • 问题可能是拼写错误,例如
    sizeof('2.5')
    ,但缺少
    。对于这个非常难看的问题,答案与
    sizeof(int)
    相同,在8位字节的系统上通常是
    4
    。N