【c语言】基石
01 Sep 2024
C语言发展初期,并没有所谓的C标准,1987年Brian Kernighan & Dannis Ritchie合著的 The C Programming Language 1st edition成为第一个公认的C语言标准
C标准演变史:C89/C90 -> C99 -> C11 -> C171.预处理(gcc -E,输出.i文件)2. 编译(gcc -S, 输出.s汇编文件)3. 汇编(gcc -c, 输出.o二进制文件)4. 链接(gcc -o)5. 一次性保存中间文件(gcc –Wall –save-temps main.c –o main)
对机器来说,C作为一种高级语言,需要进一步将编程者表达的逻辑翻译成机器指令。
这个过程涉及到数据结构(数据与量值)与算法(逻辑)
量值
量值即常量与变量,变量类型多种多样,需注意变量类型大小与具体操作系统硬件息息相关。常量在C语言中直接通过内联方式(直接展开)写到源代码中,在编译阶段求值;const修饰变量不能算是字面值常量,严格来说应该叫“只读变量”,在程序运行阶段求值,也就无法用在数组大小定义及case中。
数据(整型/浮点数)
数据存储方式和形式一直很模糊,只知道计算机中用补码的形式存储有符号整数,真实情况下是计算机根本不区分符号,数据的符号性是在指令操作数据时才具体。
计算机存储整型数采用Two's Complement格式,最高位为符号位。如下有符号数四位补码1101,其对应实际有符号数据值:最高位为负权重值,然后为正权重,相加即为实际值-3。

vice versa, 1101 + 0011 = 10000(16), 对于非负数x,可用2^n - x求出-x在n位内存中的补码。
数据形式类型隐式转换(Implicit type conversation)需要注意,尤其是在比较有符号和无符号数中,如果不处理好会出现意外结果。
浮点数存储形式在大部分计算机体系中会选择IEEE-754,很有特点,我也只是大体了解了构成,对于8位浮点数:最左1符号位 + 4阶码位 + 3小数位。浮点类型中double类型作为隐士类型转换最高优先级。
数据段存储,后续单独章节更新...