C語言筆記:第3章 數據和C
C語言中,數據類型可以分為基本數據類型、構造數據類型、指針數據類型、空類型四大類,此處只介紹基本數據類型。
bit / byte / word的基本概念:
1. 最小存儲單元是位(bit),可以存儲0或1,位是計算機內存的基本構建塊。
2. 字節(byte)是常用的計算機存儲單位。 對于幾乎所有的機器, 1字節均為8位。
3. 字(word)是設計計算機時給定的自然存儲單位。 對于8位的微型計算機(如, 最初的蘋果機) , 1個字長只有8位。 從那以后, 個人計算機字長增至16位、 32位, 直到目前的64位。 計算機的字長越大, 其數據轉移越快,允許的內存訪問也更多。
基本數據類型關鍵字:

整型:
- int ——系統給定的基本整數類型。 C語言規定int類型不小于16位。
- short或short int ——最大的short類型整數小于或等于最大的int類型整數。 C語言規定short類型至少占16位。
- long或long int ——該類型可表示的整數大于或等于最大的int類型整數。C語言規定long類型至少占32位。
- long long或long long int ——該類型可表示的整數大于或等于最大的long類型整數。 Long long類型至少占64位。
- 無符號類型:unsigned

大小端詳細描述:http://www.rzrgm.cn/lingyejun/p/8312838.html
整數的存儲方式
原碼:正整數是直接使用原碼進行存儲的,比如100這個正整數,則直接把100 轉換成二進制直接存儲。
? 100 --> 0000 0000 0000 0000 0000 0000 0110 0100
補碼:負數則是使用補碼來存儲, 補碼 = 原碼的絕對值 取反+ 1 取反加1時符號位不變
? 比如 -100 :
? 100 --> 1000 0000 0000 0000 0000 0000 0110 0100
取反-> 1111 1111 1111 1111 1111 1111 1001 1011
加1 --> 1111 1111 1111 1111 1111 1111 1001 1100
溢出:當超過取值范圍時則會編程相鄰的最小值/最大值
浮點型(實型)
概念:用來表達一個實數的數據類型
分類:占用的內存越多則精度越高
- 單精度浮點型 float , 典型尺寸 4 字節,至少精確表示小數點后6位有效數字,取值范圍10-37~10+37
- 雙精度浮點型 double , 典型尺寸 8 字節,至少精確表示小數點后10位有效數字
- 長雙精度 long double , 典型尺寸 16 字節,至少與double精度相同
浮點數的存儲:http://www.rzrgm.cn/danteking/p/15170644.html
Char類型
Char固定為1個字節(byte)
ASCII表:http://www.rzrgm.cn/fosoyo/archive/2007/08/09/848641.html
布爾類型:_Bool,布爾類型是無符號 int類型,所占用的空間只要能儲存0或1即可。1表示true,0表示false。
不同系統環境下基本數據類型的存儲長度:
類型的轉換
概念: 不同的數據類型但是可以兼容的類型之間,如果出現在同一表達式中則會發生類型的轉換。
數據類型之間轉換的模式有兩種:
- ?隱式轉換(自動):
?若在表達式中用戶沒有手動進行轉換,則系統會自動轉為高精度的類型,
?比如float + double + int --> 則系統會自動全部轉為 double
- 強制轉換(手動):
用戶根據自己的需求進行強制的類型轉換 (int )a --> 強制性把a 轉換為整型
低精度 -----------------------------------------------------------------------> 高精度
char --> short --> int --> long --> float --> double --> long double
注意:不管是隱式轉換還是強制轉換, 準換的只是在運算的過程中 ,并不會影響到原本的數, 這是一個臨時的轉換。
可移植數據類型:
概念: 不管在什么系統中,數據的尺寸都是固定不不會發生變化的數據類型成為可移植數據類型。
/usr/include/x86_64-linux-gnu/bits/types.h /* Convenience types. */ typedef int TieZhu ; // 相當于用typedef 給 int 取個別名 叫 TieZhu typedef int __int32_t ; typedef long __long_64_t ; typedef unsigned char __u_char; typedef unsigned short int __u_short; typedef unsigned int __u_int; typedef unsigned long int __u_long; /* Fixed-size types, underlying types depend on word size and compiler. */ typedef signed char __int8_t; // 有符號8位整型 typedef unsigned char __uint8_t; // 無符號8位整型 typedef signed short int __int16_t; typedef unsigned short int __uint16_t; typedef signed int __int32_t; typedef unsigned int __uint32_t; #if __WORDSIZE == 64 // ---> 判斷系統的位數(字長) 如果是 64位 typedef signed long int __int64_t; // 64位系統中 long int 就是 64位的有符號整型 typedef unsigned long int __uint64_t;// 64位系統中 long int 就是 64位的無符號整型 #else // ---> 判斷系統的位數(字長) 如果不是 64位系統 則判斷為 32 位系統 __extension__ typedef signed long long int __int64_t; // 在32位系統中 long long 才占用 64位 __extension__ typedef unsigned long long int __uint64_t; #endif
limits.h中的一些明示常量

float.h中的一些明示常量


浙公網安備 33010602011771號