嵌入式——从入门到精通 第三天

一 c语言基础
    1进制转换:
        二进制,八进制,十六进制
        二进制:0 1
        八进制: 0 1 2 3 4 5 6 7
        十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f
        低进制往高进制时:
        对应位乘以对应位的权值再求和
        高进制往低进制:
        高进制数除以低进制数得到的余数逆序排列
    2 程序在c语言中的运行方式
         程序(外存中)
        执行(加载到内存中)
        执行程序结束(回收内存空间)
    3 数字在内存中的存储:
        正数在计算机中存储对应的二进制数
        负数在计算机中存放补码
        1.原码
        2.反码
        3.补码
        4.内存数据
    4.gcc编译的流程步骤:
        gcc filename.c
        1预处理
        (1)头文件展开
        (2)宏定义替换
        #define M 100
        (3)条件编译
        gcc-    E filename.c -o filename.i
        2 编译
        将c语言程序编译成汇编代码
        gcc -S filename.c -o filename.s
        3 汇编
        将汇编代码编译成二进制代码
        gcc filename.c -o filename.o
        4 链接
        将多个二进制代码链接为一个可执行程序
        gcc filename.c -o filename
二 c语言中的数据类型分类 
                                                                                            占内存空间                                                   值域范围                                                存储方式
    (1)short :短整型                                  2字节空间                                         -32768 - 32767                                        补码
    (2)long  :长整型                                                           8个字节空间                                  -2^63 - 2^63 -1                                      补码
        3)int                整型                                                               4个字节空间                              -21亿 - 21亿                                             补码
    (4)float     单精度浮点型                                4个字节                                                    -3.4*10^38 - 1.18*10^-38                       1位符号位 + 8位指数位 + 23位尾数位
    (5)double 双精度浮点型                                                8个字节空间                                              -1.80*10^308 - 2.23*10^-308                1位符号位 + 11位指数位 + 52位尾数位
    (6)char        字符型                                                   1个字节空间                                              0-255                                                        存储字符在ASCII码表中对应数字的二进制形式             
    (7)bool        泊尔                                                            1个字节空间                                               true  false                                                1 或者0
    (8)void        缺省类型                  
三 c语言中的常量和变量:
    1.常量 :在程序运行过程中值不允许发生改变的量 
               eg:#include
    (1)浮点型常量:
                 3.14.5 默认为double类型
         3.1415f       为 float类型
                 3.14e10      为double类型
        用e代表乘以10的多少次方
    (2)浮点型变量:
        浮点型都是有符号的
         %d被称为占位符 以十进制整数方式打印
                  %u                      以无符号十进制的方式输出无符号整型                           
          %lu                     以十进制方式输出无符号长整型
          %lf                      以小数形式输出双精度浮点数
          %f                          以小数形式输出单精度浮点数
          %c                       以字符形式输出字符
    (3)字符型常量
        ‘a’'A' 'Z'  '?'
        字符型常量只能用一个字符
        '\'为转义字符
                '\b'为退行字符
        '\n'为换行符
        '\t'为横向制表符
        '\v'为纵向制表符
        '\r' 为回车符
        '\b' 为退格符
        '\\' 为\符
        '1'-> ASCII码表->49,为字符1
        '0'为字符0,ASCII码为48
        '\0'为字符反斜杠0,用来标识字符串的结尾,对应的ASCII 码为0    ,在界面上什么都不显示     
        '\123' 八进制123对应的字符,为S
        '\x32'十六进制32对应的字符
(4)字符串常量                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
        字符串常量一定要用‘’‘’包起来
        宏只是代码的替换,中间不进行任何数据计算的操作
        宏名都是大写,用来和变量区分
        每个字符串末尾都有一个\0
      
2.变量:在程序运行过程中值允许发生改变的量
    (1)变量需要先定义再使用 
         变量定义的形式
            (11)变量名可以由字母数字下划线构成,但是不能以数字开头
            (12)变量名不能和c语言关键字重名(比如int,lon等不能当变量名)
            (13)变量名最好不要与库函数重名
            (14)变量名最好要做到见名知意(驼峰法命名:第一个单词以小写字母开始,从第二个                       单词开始以后的每个单词的首字母都采用大写字母,内核命名法)
    (2)变量拥有存储空间,也有值域范围
        (3)字符型变量 char
    (4)定义变量的同时赋给他初值才叫初始化
         如果先定义 后面给值的过程叫赋值
         未经初始化的变量的值是任意的
    (5)类型转换
    (11)显示类型转换(强制转换)
        (int)3.14;
        (double)100
        显示类转换只会转换一次
    (12)隐式类型转换
        表达式: 一个多个变量和常量组成的式子   
        原则:低精度转化成高精度
               同种类型所占内存空间越大精度越高
               无符号精度高于有符号精度
               float类型精度大于int类型
               float类型进行数据运算和数据处理时会以double类型计算
               char和short类型进行数据运算和数据处理时会以int类型运算
                                            
            
    3.常量和变量可以组成表达式:由一个或者多个运算符连接的变量和常量组成的式子
    (1)整形的常量和变量
        整形常量默认为int类型
        100 : int类型
        100l : long类型
        100ul: unsign long 类型
        100u :unsigned int 类型
    注: 如果以0开头默认为八进制常量
                 如果以0x开头默认为十六进制常量
           在linux中可以用man ascii 来查询ASCII表
        
四 . 运算符
    1.算数运算符
    
     + - * 
    /:除数不能除以0 
    %:取余运算符,不能对浮点型操作
    ++:自增运算符:只能变量用   i++ 先用再加   ++i 先加再用
    - - :自减运算符:只能变量用
    2. 赋值运算符
         a*=b+c  结果为a=a*(b+c)

        +=
          a+=b的意思是a=a+b
    
    
    左值: 允许放在赋值运算符左边的值,只有变量能作为左值··
    右值:允许放在赋值运算符右边的值:常量,变量,常量变量组成的表达式
     如果左值为浮点数类型,右值为整形,会将值扩展精度
    如果左值为整数,右值为浮点数类型,会舍弃精度
    左右两边均为整形时:会直接将右值拷贝到左值去
    小数据放入大空间:数据拓展 ,有符号数高位补符号位,无符号数高位补0
    大数据放入小空间:数据压缩,直接截取数据低位放入小空间
    3.运算符:从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果
    4.目运算符: 表达式 ? 表达式一:表达式二
        5.sizeof运算符:
    3.算符优先级
    1 结合方向自左至右(单目运算符赋值运算符和三目运算符的结合方向是自右向左)
五.c语言中常用的输入输出函数;
    1.getchar putchar
    (1)putchar : 
    功能:在终端打印一个字符
    注:1.印多个字符时只能多次调用putchar
           2.只能打印字符
      (2)getchar
    功能:从终端接收一个字符。
         getchar会将程序阻塞,知道用户输入数据,程序才能继续向下进行
         getchar 只能接收一个字符,想要接收多个字符需要多次调用
      (3)
    2.scanf
     printf
    3.gets
       puts
    

你可能感兴趣的:(linux,c语言,单片机)