1> short和long可以提供不同長度的整型數,也就是可以改變整型數的取值范圍。在64bit編譯器環境下,int占用4個字節(32bit),取值范圍是-231~231-1;short占用2個字節(16bit),取值范圍是-215~215-1;long占用8個字節(64bit),取值范圍是-263~263-1
2> 總結一下:在64位編譯器環境下,short占2個字節(16位),int占4個字節(32位),long占8個字節(64位)。因此,如果使用的整數不是很大的話,可以使用short代替int,這樣的話,更節省內存開銷。
3> 世界上的編譯器林林總總,不同編譯器環境下,int、short、long的取值范圍和占用的長度又是不一樣的。比如在16bit編譯器環境下,long只占用4個字節。不過幸運的是,ANSI / ISO制定了以下規則:
short跟int至少為16位(2字節)
long至少為32位(4字節)
short的長度不能大于int,int的長度不能大于long
char一定為為8位(1字節),畢竟char是我們編程能用的最小數據類型
4> 可以連續使用2個long,也就是long long。一般來說,long long的范圍是不小于long的,比如在32bit編譯器環境下,long long占用8個字節,long占用4個字節。不過在64bit編譯器環境下,long long跟long是一樣的,都占用8個字節。
5> 還有一點要明確的是:short int等價于short,long int等價于long,long long int等價于long long
1> 首先要明確的:signed int等價于signed,unsigned int等價于unsigned
2> signed和unsigned的區別就是它們的最高位是否要當做符號位,并不會像short和long那樣改變數據的長度,即所占的字節數。
signed:表示有符號,也就是說最高位要當做符號位,所以包括正數、負數和0。其實int的最高位本來就是符號位,已經包括了正負數和0了,因此signed和int是一樣的,signed等價于signed int,也等價于int。signed的取值范圍是-231 ~ 231 - 1
unsigned:表示無符號,也就是說最高位并不當做符號位,所以不包括負數。在64bit編譯器環境下面,int占用4個字節(32bit),因此unsigned的取值范圍是:0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 – 1
3.代碼
1 #include <stdio.h> 2 /* 3 int 4個字節 %d 4 short 2個字節 %d 5 long 8個字節 %ld 6 long long 8個字節 %lld 7 8 9 signed10 unsigned %u11 */12 int main()13 {14 // 0000 0000 0000 0000 0000 0000 0000 000015 // 2的31次方-116 // 2的32次方-117 int num;18 19 /*20 signed和unsigned的區別:21 signed 最高位要當做符號位22 unsigned 最高位不要當做符號位23 */24 // signed == signed int25 // signed 有符號:正數、0、負數26 signed int a = 10;27 signed a2 = 10;28 29 // unsigned int == unsigned30 // unsigned 無符號:0、正數31 unsigned int b = 10;32 unsigned b2 = 10;33 34 long unsigned int c = 34343;35 long unsigned c2 = 423432;36 37 short unsigned int d = 4343;38 short unsigned d2 = 43243;39 40 short signed int e = 54354;41 short signed e2 = 434;42 43 44 45 46 return 0;47 }48 49 void longAndShort()50 {51 // long == long int52 long int a = 100645654654645645l;53 long a2 = 100645654654645645l;54 55 // long long int == long long56 long long int c = 100645654654645645ll;57 long long c2 = 4535435435435ll;58 59 // short == short int60 short int d = 5454;61 short d2 = 43434;62 63 //64 65 int s = sizeof(long long int);66 printf("%d/n", s);67 }
新聞熱點
疑難解答