天天看點

c語言中的有符号數和無符号數

首先看一個程式:

void main()

{

    short sdata1=-1;

    unsigned short sdata2=1;

    int data1=-1;

    unsigned int data2=1000;

    if(sdata1>sdata2)

    {

       printf("1");

    }

    else

    {

       printf("2");

    }

    printf("\n");

    if(data1 > data2)

    {

       printf("1");

    }

    else

    {

       printf("2");

    }

}

輸出的為什麼是2 1啊?這個是怎麼比較的?

解答

====

在c語言中有一個規則就是:int類型的資料與

unsigned int類型的資料進行比較時會把int類

型的資料轉換為unsigned int 類型的資料,然

後再進行比較。

int data1 = -1 轉換為unsigned int類型的數

據為:4394967295, 這個數肯定要 > 1000 ,

是以第二個會輸出1。

注意:計算機中所有的資料都是按照補碼形式存

儲的,負數的補碼求法是:先求反碼,再加1。反

碼的求法是最高符号位不變,其餘各位按位取反。

ref

===

http://bbs.bccn.net/thread-334562-1-1.html

繼續閱讀