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

如何无需if-else语句根据值选择十六进制/十进制打印整数?

实现方法

单个printf语句实现

可以利用C语言的条件表达式(三目运算符)动态选择格式字符串,用一行代码完成需求:

int d;
// 若需要输出带0x前缀的十六进制(如0xFFFF)用%#X,和原代码一致输出FFFF则用%X
printf(d == 0xFFFF ? "%#X" : "%d", d);

原理很直接:条件表达式会判断d是否等于0xFFFF,成立则返回对应十六进制格式串,否则返回十进制格式串,printf会根据选中的格式串输出对应结果。

宏定义封装

如果需要重复使用这个打印逻辑,可以封装成宏,避免重复编写条件判断:

// 宏定义中给参数加括号,避免因运算符优先级导致的逻辑错误
#define PRINT_SPECIFIC_D(d) printf((d) == 0xFFFF ? "%#X" : "%d", (d))

// 使用示例
int d;
PRINT_SPECIFIC_D(d);

调用这个宏时,会自动根据d的值选择打印格式,和原if-else逻辑完全等价,但代码更简洁。

注意:如果你的int是16位宽度,0xFFFF作为有符号int会被解析为-1(补码规则),若需要严格匹配无符号的65535,可以把判断条件改成d == (unsigned int)0xFFFF。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:54:54