C语言类型的隐式转换问题

 

 

片段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,这个循环就无法跳出来

 

 

原文地址:https://www.cnblogs.com/icefree/p/7690899.html