数据和c

1. 编程机制

​ C编程策略是,用程序把源代码文件转换为可执行文件。

1.1 编译器

​ 编译器的作用是将源代码文件及(.c)文件转化为机器语言语言代码,存放在目标文件中(.obj)中。

​ 该目标文件缺少启动代码,启动代码充当程序与操作系统间的接口,不同系统提供的启动代码不同,因为这些系统处理程序的方式不同。且缺少的解释,库文件中有许多函数的目标代码。

1.2 链接器

​ 将编写的目标代码、系统的标准启动代码和库代码三部分合成一个文件,即可执行文件。

2.命名规则

​ 给变量命名,可以使用大写字母、小写字母和下划线来命名。而且,名称的第一个字符必须是字符或下划线,不能是数字。

​ C库标识符通常以一个或两个下划线字符开始。

3.基本数据类型

  • int 通常占四个字节

    ​ 拥有四个附属关键字修饰:shortlong、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类型
posted @ 2021-12-06 17:08  日天学编程  阅读(84)  评论(0)    收藏  举报