1.c編譯過程
1.源文件.c gcc -E a.c -o a.i 預處理(1.展開頭文件 2.刪除註釋 3.條件編譯 4.宏定義的展開) ------>> 2.源文件.i
2.源文件.i gcc -S a.i -o a.s 編譯(1.檢查語法 2.將c語言轉換爲彙編語言) ------>> 3.源文件.s
3.源文件.s gcc -C a.s -o a.o 彙編(將彙編語言轉換爲二進制機器語言) ------>> 4.二進制.o
4.二進制.o gcc a.o -o a.exe 鏈接(連接不同操作系統下的庫文件) ------>> 5.可執行文件
一步編譯: gcc -o a.exe a.c
2.進制轉換
1. 10進制與其他進制的轉換
10進制 轉換爲 任何進制 : 轉換爲N進制 就除以 N ,取餘數 ,將餘數倒序排列幾位 N 進制數據 (除數取餘法)
N進制 轉換爲 10進制 : 從第一位開始 數值* N ^ 0 冪數從零開始增大 然後全部相加 結果爲 十進制數 (權值相加法)
2.二進制與其他進制轉換
使用 8 4 2 1 原理: 八進制 (三位一個) 十六進制 (四位一個) 列如 101 010 就是 4+1 = 5 +2 = 7(八進制)
3.十六進制與八進制轉換 利用二進制轉換
3.原碼 , 反碼 , 補碼
1.一個有符號的整型數據可以分爲兩部分一部分是符號位、一部分是數字位
2. signed int a= 1986(有符號標識 signed可以不用寫) unsigned int a= 1986(有符號標識 signed可以不用寫)
3.列如二進制:11111000010
1986原碼: 0000 0000 0000 0000 0000 0111 1100 0010 32位
-1986原碼:1000 0000 0000 0000 0000 0111 1100 0010 第一位代表符號位 1爲負數
1986反碼: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反碼:1111 1111 1111 1111 1111 1000 0011 1101 負數反碼爲整數的反碼的 1變0 0變1
1986補碼: 0000 0000 0000 0000 0000 0111 1100 0010
-1986補碼:1111 1111 1111 1111 1111 1000 0011 1110 負數補碼爲整數的補碼的+1
1 0000 0000 0000 0000 0000 0000 0000 0000 相加爲33位,溢出捨棄一位,所以還是0
溢出:在數據進行操作的時候會導致超出數據類型大小,會向前位進1,多於原始數據類型大小,會被系統自動捨棄 保留從後面開始數據類型大小的位數