数据和c
1. 编程机制
C编程策略是,用程序把源代码文件转换为可执行文件。
1.1 编译器
编译器的作用是将源代码文件及(.c)文件转化为机器语言语言代码,存放在目标文件中(.obj)中。
该目标文件缺少启动代码,启动代码充当程序与操作系统间的接口,不同系统提供的启动代码不同,因为这些系统处理程序的方式不同。且缺少库的解释,库文件中有许多函数的目标代码。
1.2 链接器
将编写的目标代码、系统的标准启动代码和库代码三部分合成一个文件,即可执行文件。
2.命名规则
给变量命名,可以使用大写字母、小写字母和下划线来命名。而且,名称的第一个字符必须是字符或下划线,不能是数字。
C库标识符通常以一个或两个下划线字符开始。
3.基本数据类型
-
int 通常占四个字节
拥有四个附属关键字修饰:short、long、signed和unsigned
- short int (可简写为short)通常占两个字节 为有符号类型
- long int (可简写为long)通常占四个字节 为有符号类型
- long long int 或 long long 通常占八个字节 为有符号类型 一般使用l或L做后缀,如:5L,5ull,10LLU,5ULL等。
- unsigned int 或 unsigned short int 或 unsigned long 与不加unsigned的范围不同,可以表示更大的数。
- signed 可以强调使用有符号类型的意图
-
char 占一个字节 从技术层面来看,char是整数类型 有些编译器中为有符号有些为无符号,详情查阅<limits.h>
转义字符
-
\a 警报
-
\b 退格
-
\f 换页
-
\n 换行
-
\r 回车
-
\t 水平制表符
-
\v 垂直制表符
-
\ \ 反斜杠(\)
-
\ ' 单引号
-
\ " 双引号
-
\ ? 问号
-
\0oo 八进制值(oo必须是有效的八进制数,每个o可以表示0~7中一个数)
-
\xhh 十六进制值(hh必须是有效的十六进制数,即每个h可以表示0~f中的一个数)
ASCII码 若要使用ASCII码表示字符 使用例如'\007'能准确表达使用字符编码的意图,且能嵌入c的字符串中打印输出。
-
-
_Bool bool类型,本质为一位的整型,因为c语言用1表示true,用0表示false
-
浮点型
类型
-
float 通常占4个字节
-
double 通常占8个字节
-
long double 通常占8个字节,>= double类型
表达方式
-
数字 322.56
-
科学计数法 3.2256*10^5
-
指数计数法 3.2256e2
-
十六进制 0xa.1fp10 (2的幂代替10的幂,即用p、P代替e、E) (该数十进制为(10+1/16+15/256)*1024)
上溢、下溢与舍入错误
-
上溢 计算导致数字过大,超过当前类型能表达的范围 这种情况会显示该值位inf或infinity(或者具有无穷意义的其他内容)
// 假设float最大类型值位3.4e38 float i = 3.4e38 * 100.0f; printf("i is %f\n", i); // 打印出值为inf -
下溢 浮点型以指数或尾数存储,当尾数或指数部分已经是最小值,则再除一个数时会将尾数右移,导致结果低于正常的浮点值
float i = 0.1234e-10 / 10; printf("i is %f\n", i) // 打印出为0.0123e-10 -
舍入错误 float类型数字只能存储指数比例缩小或放大的6或7位有效数字
float i = 2.0e20; float b = 2.0e20 + 1.0f; i = i - b; printf("%f, %f", i, b) // 打印出i = 0,若将i和b改为2.0e4就没有问题
-
-
复数和虚数类型
若没有包含complex.h 则有 float_Complex、double_Complex和long double_Complex三个复数类型,float_Imaginary、double_Imaginary和long double_Imaginary三个虚数类型。
若包含complex.h 则可以用complex和imaginary代替 _Complex 和 _Imaginary
_Complex 类型需要包含两个float类型的值,一个为实部,一个为虚部。用 I来代表虚数单位 i。
#include <complex.h> float complex z; z = 5.0 + 4.0 * I;
4.格式化打印
- %d 以十进制显示有符号整型变量or常量
- %o 以八进制显示无符号整型
- %x 以十六进制显示无符号整型
- %#o,%#x 显示各进制数的前缀0、0x、0X 注:gcc,clang无法编译通过%X和%#X,tcc可以通过编译并显示0X前缀。
- %c 打印字符
- %f 以十进制打印float和double类型浮点数
- %e,%E 以指数计数法打印浮点数
- %a,%A 以十六进制格式打印浮点数
- %Lf,%Le,%La,%lf,%le,%la 分别以各种格式打印long double类型

浙公网安备 33010602011771号