資料型別可以理解為固定記憶體大小的別名,建立變數的模子
變數本質
範例
有符號資料型別的最高位用於表示資料的符號
在計算機內部用補碼表示有符號數
無符號在計算機內部用原碼表示無符號數
對於固定長度的無符號數
signed 和 unsigned
c語言中預設是有符號型別
unsigned關鍵字宣告變數為無符號型別
c語言中只有整數型別能夠宣告unsigned變數
範例:當無符號 ( unsigned ) 遇到有符號 ( signed )
當無符號數與有符號數混合計算時,會將有符號數轉換為無符號數後再進行計算,結果為無符號數
錯誤地使用了 unsigned
記憶體中的浮點數
浮點數在記憶體的儲存方式為:符號位,指數,尾數
型別符號位
指數尾數
float
1位(第31位)
8位(第23-30位)
23位(第0-22位)
double
1位(第63位)
11位(第52-62位)
52位(第0-51位)
float 和 double 型別的資料在計算機內部的表示法是相同的,但由於所佔儲存空間不同,其分別能夠表示的數值範圍和精度不同。
浮點數儲存示例
浮點數的轉換步驟:
將浮點數轉換成二進位制
用科學計數法表示二進位制浮點數
計算指數偏移後的值
示例:對於指數 6,偏移後的值如下:
float: 127 + 6 -> 133
double: 1023 + 6 -> 1029
10進製浮點數的記憶體表示
實數 8.25 在記憶體中 float 表示:
8.25 轉換成二進位制表示: 1000.01 -> 1.00001 * (2^3)
符號位: 0
指數: 127 + 3 -> 130 -> 10000010
小數:00001
記憶體中的8.25的float表示:
浮點型別的秘密
int型別範圍 [-2^31, 2^31 - 1],float型別範圍 [-3.4 * (10^38), 3.4 * (10^38)]
float能表示的具體數字的個數與int相同
float可表示的數字之間不是連續的,存在間隙
float只是一種近似的表示法,不能作為精確數使用
由於記憶體表示法相對複雜,float的運算速度比int慢的多
注意:double 與 float 具有相同的記憶體表示法,因此 double 也是不精確的。由於 doubl 占用的記憶體較多,所能表示的精度比 float 高。
c 語言中的變數可以有自己的屬性,在定義變數時可以加上「屬性」關鍵字,用於指明變數具有有特殊意義。autoc 語言中區域性變數的預設屬性,編譯器預設所有的區域性變數都是auto的,定義的區域性變數在棧上分配空間。
static
指明變數的「靜態」屬性並具有「作用域限定符」的意義。
static修飾的區域性變數儲存在程式靜態區(靜態區域性變數只會被初始化一次),但作用域還是在區域性,不過生命期與全域性變數相同。
static的另乙個意義是檔案作用域標示符
static修飾前:
static修飾後:
指明將區域性變數儲存於暫存器中(從暫存器取值),只是請求暫存器變數,但不一定請求成功。
作用:用於實時系統要求高時,速度快
if 語句中零值比較的注意點:
bool 型變數應該直接出現於條件中,不要進行比較。( c 語言中沒有 bool 型變數,常用的 bool 型變數是編譯器自製,都是使用列舉方式定義的,0 假 1 或 -1 真,而 c 語言中非 0 真 0 假)
普通變數和 0 值或常量比較時,0 值或常量應該出現在比較符號左邊(防止手誤帶來的漏打「=」,建議)bool b = true;
if(b)
else
float 型變數不能直接進行 0 值比較,需要定義精度(計算機整型算的是離散,小數是連續的,故有誤差)int i =1;
if(0== i)
switch#define epsinon 0.0000001
float f =
0.0;if(
(-epsinon <= f)
&&(f <= epsinon)
)
switch 語句對應單個條件多個分值的情況
case 語句中的值只能是整型或字元型,且分支必須要有 break,否則會導致分支重疊
default 語句有必要加上,以處理特殊情況
case 語句的排列順序
do, while, for
do 語句先執行後判斷,迴圈體至少執行一次
while 語句先判斷後執行,迴圈體可能不執行
for 語句先判斷後執行,相比 while 更簡潔
三種迴圈語句使用對比(累加自然數)
break 和 continue 的區別#include
// for
intf1
(int n)
return ret ;
}// while
intf2
(int n)
// do - while
intf3
(int n)
while
(n);
}return ret;
}int
main()
C 語言的資料型別寬度擴充套件
編譯執行環境 windows 64bits vs2017 debug win32 在程式設計或者面試過程中,關於資料型別寬度的擴充套件,可能會遇到如下問題 char c 128 printf d c 輸出 128為什麼乙個正整數 128 以整型 int 輸出時變成了乙個負數?在理解上面的問題時,我們...
C語言資料型別關鍵字
變數和常量 常量是設定好不變得量 變數是在執行過程中可以修改或者賦值的量 c語言關鍵字 指只用於語義定義的單詞不能用於其他用途 int short long char unsigned signed float double bool comlex imaginary 整數 整數是指沒有小數的數 關...
C語言 資料型別 關鍵字
字串結束標誌 0 strlen 函式用於獲取字串的有效長度,直到遇到 0 停止。int main printf d n strlen arr 結果應是返回值,因為沒有 0 printf d n sizeof arr 結果為3,3 1 return0 文字檔案末尾 eof 轉義字元 n 轉義字元,代表...