zoukankan      html  css  js  c++  java
  • C语言中两个相等的char值比较 结果为false

    unsigned char appendChar1[] = {0xD3, 0xD0, 0xCF, 0xDE, 0xB9, 0xAB, 0xCB, 0xBE};
    
    
    char appendChar2[] = {0xD3, 0xD0, 0xCF, 0xDE, 0xB9, 0xAB, 0xCB, 0xBE};
    
     
    
    if ((appendChar2[i]==appendChar1[i]) && (appendChar2[i+1]==appendChar1[i+1]))
    {
    //结果为真 执行
    }
    
    else//结果为假 执行
    

    上面比较的结果为FALSE

    原因:涉及到C语言的整型类型自动提升。

    appendChar1数组的每个元素在表达式中被自动提示为unsigned int类型;appendChar2数组中的每个元素在表达式中被自动提升为int类型;因此if语句的表达式中的执行结果为flase

     何时进行整型提示:

    在运表达式中,只要涉及到int类型(无论是直接还是间接的涉及),如果其它类型(char,short int,枚举类型等)能够使用int类型来表示,则其它类型自动提升为int类型,否则提升为unsigned int 类型。

     避免该问题的解决方案:

    unsigned char bb1 = appendChar1[i];
    unsigned char bb2 = appendChar2[i];
    
    unsigned char cc1 = appendChar1[i+1];
    unsigned char cc2 = appendChar2[i+1];
    
    bool bbb = (bb1==bb2);
    bool ccc = (cc1==cc2);
    if (bbb) && (ccc))
    {
            //结果为真 执行
    }
    else//结果为假 执行
  • 相关阅读:
    linux中如何修改文件夹的用户权限 chown命令
    httpserver
    协程
    进程和线程的区别和联系
    python线程的GIL问题(全局解释器锁)
    线程同步互斥的方法
    threading模块创建线程
    信号量(信号灯)
    信号通道
    内存共享
  • 原文地址:https://www.cnblogs.com/HappyEDay/p/5488390.html
Copyright © 2011-2022 走看看