为何最后一行中sizeof(c)的值为10而非16?
long double类型sizeof计算结果异常的疑问
问题描述
以下C++代码中,变量c为long double类型,前几行输出显示sizeof(c)的值均为16,但最后一行中sizeof(c)参与计算后,结果表现为10,请问这是为什么?
#include <iostream> using namespace std; int main() { short a = 1000; int b = 10000; long double c = 5.560000505012; cout << sizeof(c) - sizeof(b) << "\n"; // 12 ===> Tmam cout << sizeof(c) + sizeof(b) << "\n"; // 20 ===> Tmam cout << sizeof(a) * sizeof(c) << "\n"; // 32 ===> Tmam cout << a * (int)c << "\n"; // 5000 cout << char( sizeof(c) * int(c) ) << "\n"; }
原因解析
最后一行代码的计算逻辑和类型转换是核心,拆解如下:
int(c)的转换结果:long double类型的5.560000505012被强制转换为int时,会直接截断小数部分,得到整数5。- 乘法运算过程:
sizeof(c)的值始终是16,因此16 * 5 = 80。 char类型转换:将整数80强制转换为char类型时,实际是取其对应的ASCII字符——ASCII码值80对应的是大写字母P。
你觉得结果“表现为10”,大概率是把输出的字符P误解成了数字,或是终端显示异常导致的混淆。整个计算过程中sizeof(c)的值从未变为10,始终保持16。
内容的提问来源于stack exchange,提问作者PArika_
相关产品推荐
相关产品推荐

