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

为何这段C语言代码输出始终为0.0000?

代码输出0.0000的原因

1. signed char赋值溢出

signed char 在多数系统中是8位数据类型,合法取值范围为 -128 到 127。当给 ch 赋值128时,超出了类型最大值,触发有符号整数溢出。按照补码规则,8位二进制的10000000会被解析为 -128,此时ch的实际值是 -128。

2. printf格式说明符不匹配

printf 的格式说明符必须与传入参数类型严格对应:

  • %f 用于输出 double(float 会自动提升为double)类型的值;
  • 而 signed char 类型的 ch 会被默认参数提升为 int 类型(通常为4字节)。

这属于未定义行为:printf 识别到%f时,会从栈中读取8字节数据当作double解析,但实际传入的是4字节的int值-128。这个整数的二进制位被当作double的位模式解析后,对应的数值极小,接近0,因此最终输出0.0000。

如果要正确输出,要么用%d输出整数类型的ch,要么先将ch转换为浮点类型再用%f,示例代码:

printf("%f", (double)ch);

内容的提问来源于stack exchange,提问作者premdanav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:35:16