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

C++数值类型极值输出异常求助:为何显示为非十进制值?

问题原因及解决方法

你的问题核心是输出整数类型时用错了格式符,导致有符号整数被当作无符号八进制数输出了——你看到的37777777600和177是八进制表示,对应十进制的-128和127。

常见错误场景

比如你可能写了类似这样的代码:

#include <stdio.h>
#include <climits>

int main() {
    printf("char range: %o to %o\n", CHAR_MIN, CHAR_MAX);
    return 0;
}

这里的%o是八进制无符号输出格式符,会把有符号的CHAR_MIN(-128)按照无符号数的八进制形式打印出来,就出现了你看到的异常值。

修正方案

  1. 用正确的格式符匹配类型:
    • 有符号整数类型(char、short、int、long)用十进制有符号格式符%d或%i:
      printf("char range: %d to %d\n", CHAR_MIN, CHAR_MAX);
      printf("short range: %d to %d\n", SHRT_MIN, SHRT_MAX);
      printf("int range: %d to %d\n", INT_MIN, INT_MAX);
      printf("long range: %ld to %ld\n", LONG_MIN, LONG_MAX);
      
    • 无符号类型用十进制无符号格式符%u:
      printf("unsigned char range: %u to %u\n", 0, UCHAR_MAX);
      printf("unsigned int range: %u to %u\n", 0, UINT_MAX);
      
  2. 更推荐的C++方式:
    直接用cout输出,它会自动处理类型的符号和格式,不需要手动指定格式符,更不容易出错:
    #include <iostream>
    #include <climits>
    #include <cfloat>
    
    int main() {
        std::cout << "char range: " << CHAR_MIN << " to " << CHAR_MAX << "\n";
        std::cout << "short range: " << SHRT_MIN << " to " << SHRT_MAX << "\n";
        std::cout << "int range: " << INT_MIN << " to " << INT_MAX << "\n";
        std::cout << "long range: " << LONG_MIN << " to " << LONG_MAX << "\n";
        std::cout << "float range: " << FLT_MIN << " to " << FLT_MAX << "\n";
        std::cout << "double range: " << DBL_MIN << " to " << DBL_MAX << "\n";
        std::cout << "long double range: " << LDBL_MIN << " to " << LDBL_MAX << "\n";
        std::cout << "unsigned char range: 0 to " << UCHAR_MAX << "\n";
        std::cout << "unsigned int range: 0 to " << UINT_MAX << "\n";
        return 0;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:00:08