小朋友學C語言(44):基本資料型別的大小和取值範圍
一、單位元組能表示的範圍
(一)無符號單位元組
一個位元組有8位,取值範圍為00000000 11111111,化為十進位制即為0 255。所以無符號的一個位元組可以表示的數字範圍為0~255,共256個數。
(二)有符號單位元組
若有符號,則最高位表示符號位,0表示正號,1表示負號。能表示的正數的最大值為01111111,即十進位制的127。能表示的負數的最小值不是11111111,而是10000000。10000000是個特殊的數字,1既表示負號,也參與了運算,化為十進位制則為-27 = 128。而11111111則是第二小的數,化為十進位制則為-127。
所以有符號的一個位元組可表示的數字範圍為-128 ~ 127,共256個數。
一個位元組 = bit。
二、布林型別
可以使用sizeof運算子求出基本資料型別的大小。
例1
#include <stdio.h> int main() { printf("%d\n", sizeof(bool)); return 0; }
執行結果:
分析:
這裡可以看出,每個bool變數佔一個位元組。因為bool只有兩個值,true和false,即1和0。所以用一個bit位就足夠表示了。這裡用一個位元組實際上是浪費了記憶體。但是因為計算機儲存資料的基本單位是Byte,不是bit。所以也沒什麼辦法。
sizeof不是一個函式,而是一個運算子。作用是計算所佔記憶體大小。
三、字元型
考慮到A-Z的ASCII碼為65-90,a-z的ASCII碼為97-122。這兩段的資料範圍,用一個位元組就可以表示。所以每個字元佔用一個位元組。下面用程式驗證一下:
例2
#include <stdio.h> int main() { printf("%d\n", sizeof(char)); return 0; }
執行結果:
四、整型
C和C++中,整型有四種:int、unsigned int、long long、unsigned long long。
unsigend int和int都佔4個位元組的記憶體,區別在於,int帶符號的,最高位用來表示符號,0為正1為負;unsigned int不帶符號,最高位不表示符號,而是參與運算表示數字。unsigned int可以簡寫為unsigned。
int的最大值是01111111,11111111,11111111,11111111,即十進位制的231 – 1 = 2 147 483 647。最小值是10000000,00000000,00000000,00000000,00000000,即十進位制的-231 = -2 147 483 648。所以int的資料表示範圍大概在-21億到21億之間。
unsigned int的最大值是11111111,11111111,11111111,11111111,最小值是00000000,00000000,00000000,00000000,00000000,即十進位制的0 ~ 4 294 967 295。
short int和unsigned short int都佔2個位元組的記憶體,區別在於,short int帶符號的,最高位用來表示符號,0為正1為負;unsigned short int不帶符號,最高位不表示符號,而是參與運算表示數字。
short int能表示的資料範圍為-215 ~ 215 – 1,即-32768 ~ 32767。
unsigned short int能表示的資料範圍為0 ~ 216 – 1,即0 ~ 65535。
unsigend long long和long long都佔8個位元組的記憶體,區別在於,long long帶符號的,最高位用來表示符號,0為正1為負;unsigend long long不帶符號,最高位不表示符號,而是參與運算表示數字。
long long能表示的資料範圍為-263 ~ 263 – 1。
unsigned long long能表示的資料範圍為0 ~ 264 – 1。
例3
#include <stdio.h> #include <limits.h> int main() { printf("%d\n", sizeof(int)); printf("%d\n", sizeof(unsigned int)); printf("%d\n", sizeof(short)); printf("%d\n", sizeof(unsigned short)); printf("%d\n", sizeof(long long)); printf("%d\n", sizeof(unsigned long long)); printf("%d\n", INT_MAX); printf("%d\n", INT_MIN); return 0; }
執行結果:
4 4 2 2 8 8 2147483647 -2147483648
五、浮點型
float型別佔4個位元組,double型別佔8個位元組。
例4
#include <stdio.h> int main() { printf("%d\n", sizeof(float)); printf("%d\n", sizeof(double)); return 0; }
執行結果:
float能表示的整數範圍約為-3.4 * 1038 ~ 3.4 * 1038,精度即有效數字為7位。
double能表示的整數範圍約為-1.79 * 10308 ~ 1.79 * 10308,精度即有效數字為15位。
雖然float和double能表示的整數範圍比int和long long能表示的整數範圍大的多,但因為浮點數無法精確表示,所以要表示整數(精確值)時,只能用整型變數來表示,不能使用浮點型變數來表示。
少兒程式設計答疑、演算法答疑請加微信307591841或QQ307591841

諾依曼演算法公眾號.jpg