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

C语言中printf输出long int十六进制结果不符的问题求助

解决long int十六进制输出结果不全的问题

你的问题出在格式符和数据类型不匹配:

  • %x是用来输出unsigned int类型(通常为32位)的十六进制格式符,而你的organization是long int类型(从预期结果看是64位)。当用%x输出时,会把64位的long int截断成32位输出,所以只得到了低32位的fffffe1f,缺失了高32位的ffffffff。

修正方法

要完整输出64位long int的十六进制补码,需要用对应64位的格式符,并确保类型匹配:

修改后的代码:

typedef struct database{
    long int organization;
} database;

int main() {
    struct database database = {-481};
    // 强制转换为unsigned long long,用%llx输出完整64位十六进制
    printf("%llx\n", (unsigned long long)database.organization);
    return 0;
}

说明

  • %llx是标准C中对应unsigned long long(64位无符号整数)的十六进制输出格式符,能保证输出完整的64位数据。
  • 将long int强制转换为unsigned long long,可以让负数以64位补码的形式完整展示,正好得到你预期的fffffffffffffe1f。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:30:46