为何C语言中size_t类型变量与-1的比较会出现异常结果?
为什么size_t变量赋值-1后,两个条件判断结果不同?
核心原因在于size_t是无符号整数类型,这直接决定了赋值和比较时的行为:
赋值
-1的本质
当你给size_t类型的file_size赋值-1时,C语言会将有符号的-1转换为无符号类型。按照无符号整数的转换规则,-1会被转为size_t能表示的最大值(比如32位系统下是0xFFFFFFFF,64位系统下是0xFFFFFFFFFFFFFFFF)。第一个判断
file_size < 0的逻辑
比较时,有符号的0会被自动转换为size_t类型(和file_size同类型的无符号数)。无符号整数的取值范围是非负的,size_t的最大值显然大于0,所以条件不成立,进入else分支输出C is confusing。第二个判断
file_size == -1的逻辑
这里的-1同样会被转换为size_t类型的最大值,而file_size本身就是这个值,因此两者相等,条件成立,输出C is easy。
简单来说:无符号变量永远不会小于0,但赋值-1得到的无符号最大值,和转换后的-1(同样是无符号最大值)是相等的,这就是两个判断结果不同的原因。
内容的提问来源于stack exchange,提问作者Eivor
相关产品推荐
相关产品推荐

