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

     

     

  • 相关阅读:
    su 命令切换用户带来的问题
    系统无法启动
    Linux单用户模式
    反射
    propety/静态方法
    内置方法,序列化模块
    第1月5周3天
    第1月4周5天
    第1月4周4日
    第1月4周3日
  • 原文地址:https://www.cnblogs.com/icefree/p/7690899.html
Copyright © 2020-2023  润新知