程序編譯鏈接原理
預處理:.c -> .i
gcc -E hello.c -o hello.i
編譯:.i / .c -> .s
gcc -S hello.i -o hello.s
彙編:.s -> .o
gcc -c hello.s -o hello.o
鏈接:.o -> 可執行程序app
gcc hello.o -o app
gedit hello.c
小端存儲法——高地址存高字節,低地址存低字節(高存高,低存低)
(intel/ARM)
0x表示十六進制
數值:0x12 34 56 78在小端存儲器裏如何存儲
0x8003 0x12
0x8002 0x34
0x8001 0x56
0x8000 0x78
1 BYTE = 8bit
大端存儲法——高地址存低字節,低地址存高字節(高存低,低存高)
(IBM大型機/網絡字節序)
數值:0x12 34 56 78在小端存儲器裏如何存儲
0x8003 0x78
0x8002 0x56
0x8001 0x34
0x8000 0x12
進制轉換
10進制: 0,1,2,3,4,5,6,7,8,9,10
2進制: 0,1
8進制: 0,1,2,3,4,5,6,7
16進制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
百 十 個
1 2 3
1x10^2 + 2x10^1 + 3x10^0
0 1 0
0x2^2 + 1x2^1 + 0x2^0 = 2
1100 1010
0+2+0+8+64+128=202
二進制: 000 001 010 011 100 101 110 111 001000
十進制: 0
1 2 3 4 5 6 7 8
八進制: 0
1 2 3 4 5 6 7 10
二進制: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
十進制: 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
十六進制: 0 1 2 3 4 5 6 7 8 9 A B C D E F
二進制:1010 0001 1000
十六進制:A 1 8
十六進制:3D7
二進制: 0011 1101 0111
八進制:11
二進制:001 001
37
八進制開頭:0
十六進制開頭:0x
十進制開頭:什麼都不跟
八進制:0777
十六進制:0xffff8000
5進制:23 = 3x5^0 + 2x5^1 = 13
8 4 2 1
2^3 2^2 2^1 2^0
1000 0100 0010 0001
0111
十進制:89 對應的二進制 1011001
89 .... 1
44 .... 0
22 .... 0
11 .... 1
5 .... 1
2 .... 0
1 .... 1
1011001
1+0+0+8+16+0+64 = 89
49 ... 1
24 ... 0
12 ... 0
6 ... 0
3 ... 1
1 ... 1
0011 0001
0x31
0567
101 110 111
bit位
8bit = 1BYTE =》每個字節擁有一個地址
0x8003
0x8002
0x8001
0x8000
1 和 -1
原碼 反碼
補碼
1 0000 0001
0000 0001 0000 0001
正數的反碼,補碼都等於原碼
-1 1000 0001
1111 1110 1111 1111
負數的補碼等於把反碼加1
0 0000 0000
0000 0000 0000 0000
-0 1000 0000
1111 1111 0000 0000
如果(0 等於 -0)
執行aaaa;
否則
執行bbbb;
97 =》 97 ... 1 => 0110 0001
48 ... 0
24 ... 0
12 .... 0
6 ... 0
3 ... 1
1 ... 1
原碼 反碼 補碼
-31 => => 31 => 31 ... 1 => 0001 1111 => 1001 1111 => 1110 0000 => 1110 0001
15 ... 1
7 ... 1
3 ... 1
1 ... 1
char b = 1; => (-128~127)
unsigned char a = 129; => (0~255)
s
0000 0000
1000 0001
1111 1111
int
unsigned int -> (0~2^32-1)
char b = 'x';
int c = 10;
'x' => 120 => 0111 1000
10 => 1010
.
.
.
0x8003
0x8002
0x8001
&b => 0x8000 1BYTE 0111 1000
.
.
.
0x7003
0000 0000 =>
0x00
0x7002
0000 0000 =>
0x00
0x7001
0000 0000 =>
0x00
&c => 0x7000
0000 1010
=> 0x0A
printf("&c = %p\tc = %d", &c, c);
'x' => 120
'\a'
'"'
345
"hello" => 'h' 'e' 'l' 'l' 'o' '\0'
'a' == "a"
"a" = "c";
"123" => 123
'1' '2' '3' '\0'
'1' - '0' = 1
1*10 + '2'-'0' = 12
12*10 + '3'-'0' = 123
int a = 5;
a % 3 => 2
a / 2 => 2
float a = 5.0
a % 3 => ???報錯
a / 2 => 2.5
1.打印基本數據類型sizeof大小
2.利用vs2013學會查看內存, 查看變量地址和地址裏的數值
c語言-常量變量筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
libxml2剖析(2):編譯
我还在迷路
2018-08-27 20:04:11
libxml2 主要函數用法
我还在迷路
2018-08-27 20:04:11
windows 編譯libxml2 64位及32位都可以使用
我还在迷路
2018-08-27 20:04:11
socket編程 及select poll epoll示例
我还在迷路
2018-08-27 20:04:09
libxml2剖析(3):使用教程
我还在迷路
2018-08-27 20:04:09
const的思考
duchuanying
2018-08-27 19:55:25
深入理解C語言指針的奧祕
duchuanying
2018-08-27 19:55:25
C/C++ 程序設計員應聘常見面試試題深入剖析
duchuanying
2018-08-27 19:55:24
內核模式下獲取SSDT服務索引代碼
毛主席夸帅
2018-08-27 19:54:14
獲取Windows系統版本號以及位數(兼容Win8)
毛主席夸帅
2018-08-27 19:54:13
[Win32]獲取當前系統可用磁盤空間最大的盤符
毛主席夸帅
2018-08-27 19:54:02
在物理內存不足的情況下使用內存映射文件進行大內存操作
毛主席夸帅
2018-08-27 19:54:01
DirectDraw方式截取系統屏幕
毛主席夸帅
2018-08-27 19:53:51
GDI方式截取系統屏幕
毛主席夸帅
2018-08-27 19:53:50