歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C語言中類型隱性轉換問題及解決

謹記:在C語言中,當兩種不同類型之間運算時,低字節長度類型會向高自己長度類型轉換,有符號會向無符號類型轉換。

舉例子如下:

#include <stdio.h>


void func(void)
{
    int i = 1;
    unsigned char  c1 = 1;
    signed char    c2 = -1;

    if (c2 > i){
        printf("\r\n -1 > 1");
    }
    else{
        printf("\r\n -1 <= 1");
    }

    if (c2 > c1){
        printf("\r\n -1 > 1");
    }
    else {
        printf("\r\n -1 <= 1");
    }

    printf ("\n");
}

int main()
{
    func();
    return 0;
}

 輸出:

-1 <= 1
-1 <= 1

當C2與i進行比較時,由於C2是有符號8位,i是無符號32位,根據C語言的規則,c2被轉換成32位,即-1的補碼,故會得出-1>1的結論。

而後面一個-1<1的情況是 c2轉化成無符號8位整數,即255,255, 所以大於1。

Copyright © Linux教程網 All Rights Reserved