在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]

Posted

技术标签:

【中文标题】在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]【英文标题】:float data type(5.0) being assigned 8 bytes rather that 4 using sizeof operator in C [duplicate] 【发布时间】:2017-08-21 08:27:18 【问题描述】:

为什么 sizeof(5.0) 返回 8 作为其输出而不是 4,因为我的机器为 float 数据类型分配了 4 个字节? 默认情况下是否将5.0 视为double(分配的内存= 8 个字节),如果是,那么为什么会这样?

【问题讨论】:

why sizeof(13.33) is 8 bytes? 【参考方案1】:

是的。

N1570(最新 C11 草案),§6.4.4.2 p4

无后缀的浮动常量的类型为double。如果以字母fF 为后缀,则具有 输入float。如果以字母lL 为后缀,则其类型为long double


至于您的“为什么”问题,在实践中,float 由于其精度非常有限而很少有用,所以这个默认值“有意义”。如果您没有充分的理由(例如非常有限的内存限制),请不要使用float。如果你真的需要一个float 常量,写5.0f

【讨论】:

有趣的是,虽然我们认为float 的精度有限,但有几个机器学习应用程序float 也太大(并且占用太多空间以防万一)巨大的矩阵),因此他们正在寻找半精度。【参考方案2】:

因为所有浮点文字默认为double。如果您希望它是 float,请使用 f 后缀,如 5.0f

阅读例如this floating point constant (literal) reference 了解更多信息。

【讨论】:

以上是关于在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理

详解C语言中sizeof的使用

C++Sizeof与Strlen的区别与联系

C语言中,sizeof运算符有啥作用?

后台开发 -- 核心技术与应用实践

C/C++ sizeof是一个关键字,不是函数(其后有时可不加括号作为分隔符)