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

为何C语言中size_t类型变量与-1的比较会出现异常结果?

为什么size_t变量赋值-1后,两个条件判断结果不同?

核心原因在于size_t是无符号整数类型,这直接决定了赋值和比较时的行为:

  1. 赋值-1的本质
    当你给size_t类型的file_size赋值-1时,C语言会将有符号的-1转换为无符号类型。按照无符号整数的转换规则,-1会被转为size_t能表示的最大值(比如32位系统下是0xFFFFFFFF,64位系统下是0xFFFFFFFFFFFFFFFF)。

  2. 第一个判断file_size < 0的逻辑
    比较时,有符号的0会被自动转换为size_t类型(和file_size同类型的无符号数)。无符号整数的取值范围是非负的,size_t的最大值显然大于0,所以条件不成立,进入else分支输出C is confusing。

  3. 第二个判断file_size == -1的逻辑
    这里的-1同样会被转换为size_t类型的最大值,而file_size本身就是这个值,因此两者相等,条件成立,输出C is easy。

简单来说:无符号变量永远不会小于0,但赋值-1得到的无符号最大值,和转换后的-1(同样是无符号最大值)是相等的,这就是两个判断结果不同的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:00:57