片段A:
#include <stdio.h>
int main(void)
{
unsigned short index = 0;
unsigned short i = 0;
for(i=0;i<index-1;i++)
printf("%d
",i);
}
在for循环中index 为u_short类型,1为int类型,index-1中,index先隐士转换成int型,index-1=-1 也就是0xffffffff,
i<index-1 那么0 < -1 不满足条件,跳出循环
#include <stdio.h>
int main(void)
{
unsigned long index = 0;
unsigned short i = 0;for(i=0;i<index-1;i++)
printf("%d
",i);
}
在for循环中index 为u_long类型,1为int类型,index-1中,1先隐士转换成u_long型,, 所以index-1=0xffffffff ,
被解析为无符号数4294967295,i<index-1 unsigned short的取值范围[0,65535];而index-1=0xffffffff=4294967295,
i一直加,加到63335还是小于4294967295,然后再加1,那么就会得到i=0,这个循环就无法跳出来