越来越体会到C语言的重要性,不管是在计算机底层的理解上,还是在算法数据结构上,所以遂决定重新拾起C语言,不定期更新一些知识点。
推荐博客:http://blog.csdn.net/itcastcpp
1.程序编译链接原理
预处理:.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
2.两种存储法:
小端存储法——高地址存高字节,低地址存低字节(高存高,低存低)(我们平时用的pad和手机笔记本 )
(intel/ARM)0x表示十六进制数值:0x12 34 56 78在小端存储器里如何存储
0x8003 0x12
0x8002 0x340x8001 0x560x8000 0x781 BYTE = 8bit大端存储法——高地址存低字节,低地址存高字节(高存低,低存高)
(IBM大型机/网络字节序)数值:0x12 34 56 78在小端存储器里如何存储0x8003 0x78
0x8002 0x560x8001 0x340x8000 0x123.进制转换
10进制: 0,1,2,3,4,5,6,7,8,9,102进制: 0,18进制: 0,1,2,3,4,5,6,716进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F八进制开头:0
十六进制开头:0x十进制开头:什么都不跟
十进制:89 对应的二进制 1011001
89 .... 1 44 .... 0 22 .... 0 11 .... 1 5 .... 1 2 .... 0 1 .... 1 10110011+0+0+8+16+0+64 = 89bit位
8bit = 1BYTE =》每个字节拥有一个地址
0x8003
0x80020x80010x8000 1 和 -1原码 反码 补码
1 0000 0001 0000 0001 0000 0001 正数的反码,补码都等于原码
-1 1000 0001 1111 1110 1111 1111 负数的补码等于把反码加10 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 1111int 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 => 0x0Aprintf("&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' = 1212*10 + '3'-'0' = 123 int a = 5;a % 3 => 2a / 2 => 2float a = 5.0
a % 3 => ???报错a / 2 => 2.5