其实可以这样理解,两个不同类型的数进行运算,会进行隐士转换,“小”的会向“大”的转换。
同理,无符号整数和有符号整数运算,有符号整数会转换为无符号整数。
注意,这里的运算当然包括比较大小。
比如:
#include <stdio.h> #include <string.h> int main(void) { char *p = "hello"; int a = -1; /*比较字符串的长度和a的大小*/ if(strlen(p) > a) { printf("len > a\n"); } else { printf("len < a\n"); } printf("%d\n",strlen(p)); return 0; }
输出结果如下:
len < a 5
因为strlen返回的数据类型是size_t类型的,size_t是无符号整数类型,与a比较的时候,a被转换为了无符号整数,而-1的无符号整数大小当然比5大。
详细讲解参看: