c++定義了表示整數、浮點數、字元和布林值以及void的基本資料型別,
算術型別的儲存空間與機器有關,
因為機器位數不同,這些型別所能表示的最大(最小)值也因機器的不同而有所不同。
型別+含義+最小儲存空間如下:
bool 布林型
char 字元型 8位
wchar_t 寬字元型 16位
short 短整型 16位
int 整型 16位
long 長整型 32位
float 單精度浮點型 6為有效數字
double 雙精度浮點型 16位有效數字
long double 擴充套件精度浮點型 16位有效數字
具體分析如下:
1、整數
一般認為
short ,
int ,
long為表示整數的型別;
一般,short
型別為半個機器字長
,int
型別為乙個機器字長,而
long
型別定義為不小於int型別,long long型別為8個位元組。
使用sizeof來看一下他們的結果:
cout << sizeof(short) << endl;
cout << sizeof(int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(long long) << endl;
在當前電腦編譯器下為: 2,4,4,8
因此,在當前編譯器下,使用int和long是沒有區別的。在使用時盡可能使用最合適的型別,short的使用可以減少儲存空間,int的使用可以加快程式處理速度(乙個機器字長),long long的使用是在int範圍不足以表示時使用
unsigned int與int——在一起操作時,都會轉換為無符號數,如下:
unsigned int a = 100;
signed int b = -130;
if (a < b)
printf("%u", b);
輸出為: 4294967166 。在運算中,無符號數優先順序要高於有符號數。
2、浮點數
浮點數常用的為 float,double與long double;具體使用需要根據編譯器處理結果而定。
使用sizeof來看一下他們的結果:
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(long double) << endl;
在當前電腦編譯器下為: 4,8,8
float與double的區別在於精度的不同,double精度高,有效位為16位,float精度為7位。
例如,在如下的example中的輸出:
float l1 = 100.22222222222;
double l2 = 100.222222222222;
printf("%0.11f\n", l1);//輸出為100.22222137451
printf("%0.11f\n", l2);//輸出為100.22222222222
在高位機的某些處理器中,
long double的大小可能為16位元組,這個時候使用long double將得到更準確的精度。
在程式中,精度越高,處理器處理資料花費時間越多,程式執行速度越慢。
3、字元
字元有 char、wchar_t、char16_t、char32_t ;這些型別與字符集有關係,涉及unicode,utf-8,utf-16等,可通過一下鏈結來了解字元的出現及意義:
@于洋的經典論述 ————講述了什麼是字符集以及字符集是如何出現的,使用字符集的必要性
4、bool值
判斷true與false的型別,可以認為ture就是1,false就是0.
cout << false << endl; //輸出為0
cout << true << endl; //輸出為1
5、void型別
void的字面意思是「無型別」,void *則為「無型別指標」,void *可以指向任何型別的資料。
使用void的意義在於:
對函式返回的限定;
對函式引數的限定
1、對於有些編輯器來說,不定義函式返回值是可編譯的。使用void可增強**的嚴謹性與可讀性
test()
在某些編譯器下是可編譯的... ... ;而 test(2)在某些編譯器下是可執行的。 因此 int test(void) 的定義是必要的
2、注意void指標
按照ansi標準,不能對void指標進行演算法操作,即
void * pvoid;
pvoid++;
是不合法的。
但是gnu標準則不一樣,它指定void *的演算法操作與char *一致。因此,使用 void *pvoid;(char*)pvoid++來實現相容是必要的
void在c語言庫中的經典使用:
void *memcpy(void *dest, const void *src, size_t n); //記憶體複製函式
任何型別的指標都可以傳入memcpy中,而memcpy只是負責把src那一塊的儲存複製到dest區域中,複製本身與資料型別無關
學習Linux C程式設計之資料型別
一 變數與常量 1.變數 區域性變數 在函式內定義說明,作用域為函式內,離開函式再呼叫即為非法。注意 1.主函式定義主函式用,不能被其他函式用,主函式也不能用其他函式定義變數。2.形參屬於被調函式區域性變數,實參屬於主調函式區域性變數。3.允許不同函式使用相同變數名。4.復合語句可定義變數,作用域在...
《js高階程式設計》之資料型別概覽
基本概念 js有五種簡單資料型別,也稱基本資料型別 undefined null boolean number和string 一種複雜資料型別也稱引用型別,裡面包含的 function array date 分類1.undefined在使用var宣告變數宣告但未對其加以初始化時,值為undefine...
《C程式語言》 資料型別
作為乙個初學者,當在一次,看到這些繁瑣的東西時,我實在是不想看,但還是努力克制自己,靜下心來,將它又看了一遍!1.c語言中的變數命名 識別符號 規則 只能由 字母,數字,下劃線3 種字元組成,且第乙個字元不能為數字 可以為 字母 或下劃線 下劃線 被看成是字母,通常用於命名較長的變數名 注意 由於庫...