You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何最后一行中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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:43:33