基本數據類型的大小和取值范圍


一、單字節能表示的范圍

(一)無符號單字節

一個字節有8位,取值范圍為0000000011111111,化為十進制即為0255。所以無符號的一個字節可以表示的數字范圍為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; } 

運行結果:

1

分析:
這里可以看出,每個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; } 

運行結果:

1

四、整型

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; } 

運行結果:

4
8

float能表示的整數范圍約為-3.4 * 1038 ~ 3.4 * 1038,精度即有效數字為7位。
double能表示的整數范圍約為-1.79 * 10308 ~ 1.79 * 10308,精度即有效數字為15位。
雖然float和double能表示的整數范圍比int和long long能表示的整數范圍大的多,但因為浮點數無法精確表示,所以要表示整數(精確值)時,只能用整型變量來表示,不能使用浮點型變量來表示。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM