一、編譯步驟
預處理 -e
編譯 -c
彙編 -s
鏈結二、資料型別(32bit 系統)
基本資料型別:
整型:int(4) short(2) long(4)
字元型:char(1)
浮點型:float(4) double(8)
列舉型:enum
構造資料型別:
struct
union
陣列型別
指標型別
void型
1> 資料型別的取值範圍
char (1byte)
取值範圍
unsigned char: 0~255
signed char: -128~127
eg:char ch = 127;
char ch1 = ch + 1; //-128
int(4byte)
取值範圍
unsigned int: 0~2^32-1
signed int: -2^31 ~ 2^31-1
short(2byte)
取值範圍
unsigned short: 0~2^16-1
signed short: -2^15 ~ 2^15-1
long的取值範圍同int
注意:正數的原碼、反碼、補碼是一樣的;
負數的補碼 = |原碼|取反+1;
2> 常量
常量是指在程式執行期間其數值不發生變化的資料;
整型常量:二進位制 十進位制 十六進製制 八進位制
eg:二進位制:1001110
十進位制:78
十六進製制:0x4e
八進位制:0116
浮點常量:
形式:小數形式 [+/-]m.n
eg:3.1415926 -0.45
指數形式:[+/-]m.n [e/e][+/-]t
eg: -3.5789e-8 等價於 -3.5789*10^(-8)
字元常量:
字元常量是指乙個單一字元, 其表示形式是由兩個單引號包括的乙個字元。
eg:'a' '\0' 'wq'(×)
字元常量的值就是該字元的ascii碼值;
字串常量:
字串常量是指用雙引號括起來的一串字元來表示的資料。
eg:"student" "hello" "a" "小明"
標識常量:
是指用識別符號代替常量使用的一種常量, 其名稱通常是乙個識別符號
形式:#define 標識常量名 常量
eg:#define n 10
3> 變數
變數:說明形式:
儲存型別 資料型別 變數名;
儲存型別:auto(自動儲存) static(靜態儲存) register(暫存器) extern
資料型別:同前邊的資料型別
變數名:符合合法的識別符號
eg:int a; //等價於 auto int a;
static int b; //b存在記憶體中的靜態儲存區
register int c;//c儲存在暫存器中
extern int d; //
生命週期及作用域:
區域性變數(棧區):未初始化時,系統賦隨機值
生命週期:從定義開始,到模組結束
作用域:模組內
全域性變數(資料區):未初始化,系統自動賦0
生命週期:從定義開始,到程式結束
作用域:程式內
注意:區域性變數和全域性變數重名時,區域性遮蔽全域性;
static修飾的變數:
區域性變數:(資料區)未初始化時,系統自動賦0
生命週期:從定義開始,到程式結束
作用域:模組內
全域性變數:(資料區)未初始化時,系統自動賦0
生命週期:從定義開始,到程式結束
作用域:程式內
注意:static修飾的全域性變數只能在本檔案中使用,不能在其他檔案用extern宣告;
extern:
注意:1> 至少兩個.c檔案,只有乙個main
2> 編譯時多個.c同時編譯
4> 變數的賦值及初始化
初始化:定義時賦值;
儲存型別 資料型別 變數名 = 初值;
eg:int a = 10;
char ch = 'a';
float f = 12.45;
double e = 2.11;
5> 記憶體圖
6> 資料型別的強制轉換
形式:顯示轉換:
(資料型別名稱)< 表示式 >
eg:int a=22, b=0 ;
float c = 24.87, d= 3.3;
b = (int) (a + c +d) ; // b存入右邊表示式的計算 結果為50
需要注意的是:
強制型別轉換符後面的表示式如存在複雜運算,就一定要用小括號括起來
強制型別轉換符是一種不安全的轉換,一般都是將高階型別轉換成低階型別,要丟失資料的精度;
強制型別轉換並不改變表示式中變數的資料型別和其值。
隱式轉換:
二、表示式
1、表示式
由運算子、運算量及標點符號組成的序列;
eg:i++
a = b
a == b
a>b?a:b
a += 3, b = a
2、表示式語句
《表示式》 ;
eg:i++;
a = b;
int a;
三、運算子
1、算數運算子:(+ - * / % ++ --)
%:兩邊的運算量必須是整數
++:自增運算子
eg:int a = 10;
//a++; //a++ 表示式的值是10, a自身的值為11
++a; //++a 表示式的值是11, a自身的值為11
--:自減運算子
eg:int a = 10;
//a--; //a-- 表示式的值是10, a自身的值為9
--a; //--a 表示式的值是9, a自身的值為9
2、關係運算子(> < >= <= == !=)
注意:==(判斷) 與 =(賦值)
eg:int i = 20;
if(10 = i)
printf("i=10\n");
else
printf("else\n");
3、邏輯運算子(&& || !)
注意:運算量有兩個 0和1
1> &&:(一假為假)
運算量 運算量 結果
0 0 0
1 0 0
1 1 1
0 1 0
例如,int x=5, y=18;
(x>=5) && (y<20) 結果值為1
((x+1)>=0) && (y<17) 結果值為0
((x-8)>=0) && (y==18) 結果值為0
((x-5)>0) && (y!=18) 結果值為0
注意:&&運算子的短路現象,即&&左邊的表示式的值為0時,右邊表示式不會做運算;
2> ||:(一真為真)
運算量 運算量 結果
0 0 0
1 0 1
1 1 1
0 1 1
注意:||運算子的短路現象,即||左邊的表示式的值為1時,右邊表示式不會做運算;
3> !:邏輯非
運算量 結果
0 1
1 0
注意:非0 即真;
eg:例如,
int k=8;
! ( k ==0) 結果值為1
! ((k-8) == 0) 結果值為0
! (k<= 0) 結果值為1
4、位運算子(~ & | ^ << >>)
注意:運算之前將運算量化為二進位制運算;
1>~:
eg:unsigned char x=0x17, y;
y = ~x ;
2> &
eg:unsigned char x = 0x23;
unsigned char y = 0x56;
unsigned char z = x & y;
printf("z=%x\n",z); //0x02
3> |
eg:unsigned char x = 0x23;
unsigned char y = 0x56;
unsigned char z = x | y;
printf("z=%x\n",z); //0x77
C語言基礎 2
1.正數的反碼,補碼都等於原碼 負數的補碼等於反碼加一。例 31的補碼 1 原碼 1001 1111 2 反碼 1110 0000 3 補碼 1110 0001 2.計算機中儲存資料用補碼主要是因為 0這個數的原碼和反碼不唯一,出現了bug,而 0補碼是一致的。3.字串以 0 結尾。字元常量 x 字...
c語言基礎2
陣列 定義 型別說明符 陣列名 常量表示式 例如int a 10 陣列中十個元素位元組位址是連續的,10代表陣列的長度,0 9是陣列的下標 在陣列的位址中,由a 0 到a 9 中位址是從低位址到高位址。求陣列中元素的個數大多使用 sizeof a sizeof a 0 關於陣列位址的問題 a 0 代...
C語言基礎 2
迴圈 loop if語句被叫做條件控制結構,因為它可以在前提條件成立的情況下執行語句。因為這個原因,if也被認為是決策結構。語法如下 if 表示式 expression 執行語句 statements 具體例子 include intmain 以上 用python可以寫成一下樣子 score 89i...