zoukankan      html  css  js  c++  java
  • 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,这个循环就无法跳出来

     

     

  • 相关阅读:
    Uva
    Uva
    Uva
    Uva
    Uva
    Uva
    Uva
    Uva
    第二次结队编程作业
    第三次软件工程作业的总结
  • 原文地址:https://www.cnblogs.com/icefree/p/7690899.html
Copyright © 2011-2022 走看看