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位的就會顯示錯誤的數字。