为什么“-1 < strlen(s)”等于0?

Hou*_*Yao -1 c integer strlen comparison-operators implicit-conversion

char* s =(char*) "sss";
int j = -1;
printf("%d", j < strlen(s));
Run Code Online (Sandbox Code Playgroud)

j < 3主要是关于和之间的区别j < strlen(s)

在上面的代码中,printf()函数打印0,但是如果我改为strlen(s)3,结果就变成1(正如我所期望的那样)。

原因是什么?

Tom*_*zes 8

的返回类型strlensize_t,它是无符号整数类型。当比较 asize_t和 an时int,应用“通常的算术转换”。在这种情况下,这意味着int操作数 ie-1被转换为 a size_t,从而产生最大的可能size_t值,该值大于该strlen值。

  • @SergeBallesta从有符号到无符号的转换不是定义为只要数字保持负数就添加最大值+ 1吗?这对于其他表示形式也应该没问题,但对于 2C 来说,它有一个很好的优点,即位模式是相同的。 (3认同)