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

为何C语言中unsigned short(0xffff)输出65535而unsigned int(0xffffffff)输出-1?

问题分析与解答

核心问题

代码中格式符与变量类型不匹配:printf的%d用于输出有符号十进制整数(int类型),但传入的是无符号类型变量(unsigned short、unsigned int),这会触发未定义行为,导致输出不符合预期。

具体输出逻辑解释

  1. 对于unsigned short u_short = 0xffff:
    调用printf时,unsigned short会自动提升为int(int精度高于short)。0xffff作为无符号短整数对应数值65535,提升为int后是0x0000ffff,这个值作为有符号int仍为65535,因此%d输出65535。
  2. 对于unsigned int u_int = 0xffffffff:
    用%d输出时,0xffffffff会被当作有符号int的补码解析。在32位系统中,该值对应有符号int的最小值-1,所以输出结果为-1。

修复方案

使用无符号整数对应的格式符:

  • unsigned short对应%hu
  • unsigned int对应%u

修改后的代码:

#include <stdio.h>
unsigned short u_short = 0xffff;
unsigned int u_int = 0xffffffff;

int main(){
    printf("unsigned short = %hu\n", u_short);
    printf("unsigned int = %u\n", u_int);
    return 0;
}

修改后正确输出:

unsigned short = 65535
unsigned int = 4294967295

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:01:01