Anwar's Blog

【c语言】基石

01 Sep 2024
2024-09-01-【C语言】重学C语言-001

C语言发展初期,并没有所谓的C标准,1987年Brian Kernighan & Dannis Ritchie合著的 The C Programming Language 1st edition成为第一个公认的C语言标准

 

img

对机器来说,C作为一种高级语言,需要进一步将编程者表达的逻辑翻译成机器指令。

这个过程涉及到数据结构(数据与量值)与算法(逻辑)

量值

量值即常量与变量,变量类型多种多样,需注意变量类型大小与具体操作系统硬件息息相关。常量在C语言中直接通过内联方式(直接展开)写到源代码中,在编译阶段求值;const修饰变量不能算是字面值常量,严格来说应该叫“只读变量”,在程序运行阶段求值,也就无法用在数组大小定义及case中。

数据(整型/浮点数)

数据存储方式和形式一直很模糊,只知道计算机中用补码的形式存储有符号整数,真实情况下是计算机根本不区分符号,数据的符号性是在指令操作数据时才具体。

计算机存储整型数采用Two's Complement格式,最高位为符号位。如下有符号数四位补码1101,其对应实际有符号数据值:最高位为负权重值,然后为正权重,相加即为实际值-3

2024-10-01-003801.png

vice versa, 1101 + 0011 = 10000(16), 对于非负数x,可用2^n - x求出-x在n位内存中的补码。

数据形式类型隐式转换(Implicit type conversation)需要注意,尤其是在比较有符号和无符号数中,如果不处理好会出现意外结果。

浮点数存储形式在大部分计算机体系中会选择IEEE-754,很有特点,我也只是大体了解了构成,对于8位浮点数:最左1符号位 + 4阶码位 + 3小数位。浮点类型中double类型作为隐士类型转换最高优先级。

数据段存储,后续单独章节更新...

buy me a coffee