C語言-整數

1、整數類型:

         long int;

         long;

         short int;

         short; ubsigned int; unsigned; unsigned long;unsigned short;long long;

short類型可能比int類型佔用的空間少,long類型可能比int類型佔用的空間多。C語言只是規定short類型必能比int佔用空間多,long不能比int佔用空間少

         各種類型的int佔用的空間不一定時固定的(因爲機器的不同而不同),C標準只對基本類型規定了最小大小

          在我當前的電腦上(64位機)int的範圍【-2147483648,2147483647】,unsigned int 的範圍【0,4294967295】,整數溢出後的效果是什麼呢?

#include<stdio.h>

int main(void)

{

    int i=2147483647;

    unsigned int j = 4294967295;



    printf("%d %d %d\n",i,i+1,i+2);

    printf("%d %d %d\n",j,j+1,j+2);



    return 0;

}

結果圖下圖:

 
 

 

 

2、打印short、long、long long和unsigned類型

      打印unsigned int使用%u轉換說明、long使用%ld,如果電腦中的long和int是同樣的位數可以直接都用%d打印但是移植到其他不同的機器上的時候會出錯。打印八進制和十六進制也是直接在o和x前面加上%。

    %hd是指short類型的整數(十進制),h和l前綴都可以和u一起使用(h,l在前,u在後),long long類型用%lld和%llu分別表示有符號和無符號。

//print2.c代碼    

#include<stdio.h>

int main(void)

{

    unsigned int un = 3000000000;

    short end = 200;

    long big = 65537;

    long long verybig = 12345678908642;

 

    printf("un = %u and not %d\n",un,un);

    printf("end = %hd and %d\n", end, end);

    printf("big = %ld and not %hd\n", big, big);

    printf("verybig = %lld and not %ld\n", verybig, verybig);

 

    return 0;

}

結果如下:

結果可能都不會相同(隨機器的不同而不同)。

其中需要解釋的是第二行的輸出,不管使用hd環視d輸出的都是200,因爲電腦中在給函數傳遞參數的時候都會轉換成int來傳遞,所以輸出的都是一樣的。最後一行的輸出有的電腦會輸出“verybig = 1234567890864 and not 1942899938”我的電腦中long的位數應該是64位的足夠顯示這個例子中正確的數字,但是如果是32位的就會顯示錯誤的數字。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章