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

关于C语言三元运算符返回值的入门疑问:比较结果为何不符预期?

问题原因解析

第一个代码输出0的原因

宏SZIE定义的1024属于int类型,-1同样是int类型,所以表达式SZIE < -1是两个有符号整数的直接比较。1024是正数,显然大于-1,条件不成立,因此输出0。你之前误以为-1会被转换为SIZE_MAX,但这个转换只有在操作数涉及无符号类型时才会触发,而这里两边都是有符号int,不会触发该转换。

第二个代码输出1的原因

当你显式将-1转换为size_t(无符号整数类型)后,根据C语言的寻常算术转换规则,另一个操作数SZIE(int类型)会被隐式转换为size_t类型:

  • 1024转换为size_t后仍是1024;
  • (size_t)-1等价于SIZE_MAX(无符号整数类型的最大值)。

此时表达式变成1024 < SIZE_MAX,显然成立,因此输出1。

核心规则总结

C语言中,只有当有符号整数和无符号整数进行运算/比较时,有符号整数才会被转换为无符号整数类型;若两个操作数同为有符号整数,则直接按有符号规则处理,不会触发无符号转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:02:05