如何无需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
相关产品推荐
相关产品推荐

