c基础第三篇

1.共享文件夹
    windows 与 linux 通讯 
    
    a.创建共享文件夹    
        虚拟机 ---> 设置 ---> 选项 ---> 共享文件夹 ---> 总是开启 
        
    b.共享文件在linux中的位置
        cd /mnt/hgfs/share 
    
    
    a. shell 命令
        
        echo: 输出 
            >
            >> 
        
        cat: 
        
        clear  :ctrl + l 
        tab:补全 
        
    b. vim 编辑器 
        命令行:
            yy     nyy dd ndd p P u crtl+r gg G  gg=G dG 
        插入:
            i     I     A a o O 
        底行:
            w wq q q! x set nu  set nonu     /+字符串+ 回车 n N 
            nohl     %s/old/new/g   m,ns/old/new/g 
    
    c. 计算机组成 
        
        1. 输入输出 
        2. alu运算器
        3. 控制器
        4. 存储器 
        5. 总线 
        
    d. 数据进制转换 
        
        二进制 0 1 
            0b 
             
        八进制 
        
        十六进制    a 
        
    e. 数据在计算机里面的存储 
        
        补码形式存储 
            
            char a = -5;
            源码:1000 0101 
            反码:1111 1010
            补码:1111 1011 
            
    d. 标识符  
        
        i. 数字 字母 下划线  数字不能开头 
        ii. 不能与关键字相同
        iii. 见名知意 
        iv. 区分大小写 
        v. 驼峰命名法 
        vi. _   
    
    e. 
        基础类型:
            char 
            short int long long long 
            float 
            double 
            
        构造类型
            int []
            struct 
            enum
            union 
            
        指针类型
            *
            
        空类型
            void 
            
3.变量 

    a. C语言中的变量:
    
            意义: 在内存中,通过数据类型,分配空间
        
    b. 语法格式 
        
        <存储类型> <数据类型> <标识符> 
        
            注:
                数据类型: 决定分配空间 对应的大小 
                标识符:    分配空间的名称  
                
4.常量:
    
    概念:程序运行当中,不会发生变化  
    
    a. 整形常量 
        
        100     200        0b111000    072 0xaffa  3.14    0.123e+10
        2.31e-10
        
        科学计算法  0.123e+10 = 0.123 * 10^10 
                    2.31 * 10^-10
                    
    b. 字符常量  ascii 码
        'a' ascii 97  - 32
        'b'
        'c'
        '\n' ascii  10 
        
        'A'  ascii 65
        '0'  48
         0 '\0' ascii 0 
    
    c. 字符串常量
        "hello world"
        "wood"
        "100"
        
    d. 标识常量: 宏定义
    
        i. 直接定义 
        
            #define M 10  // 没有 分号; 
            
            注意:
                (1). 在定义标识常量, define 这句话结尾是没有';'
                (2). 在定义宏的时候, 一般采用大写 
                (3). 宏在预处理阶段进行替换 
                (4). 在代码中一改全改 
                (5). 替换掉魔鬼数字 
                
            demo:
            #define N 11
                int arr[N]
                int arr[N]
                int arr[N]
                
                switch ()
                {
                    case add:
                    
                }
            
        ii. 宏运算 
        
            #define M     10
            #define N    M - 5
            
            int main()
            {
                printf("2 * N = %d", 2*N);
                                    15, 10, 
                                    // 2 * M -5 
                                    // 2 * 10 -5
                
                printf("N * N = %d", N * N); 
                                    M - 5 * M -5
                                    10 -5 * 10 -5
                                    -45 
                return 0;
            }
        
            注:
                宏在替换的时候,是原样替换  不会增加括号  
        
        iii. 宏函数 
        
            #define ADD(x,y) ((x)+(y)) 
            
            
            int main()
            {
                printf("%d\n", 2 * ADD(10, 20)); // 60
                              
                return 0;
            }
        
5. 输出 printf 
        
        格式:
            printf("控制格式", 数据列表)
            
        控制格式:
            %d : 十进制有符号的数字 
            %c : 字符 
            %s : 字符串  
            %p : 打印地址  
            
            char ch = 'm'    
            printf("%d", ch )
            
6. 运算符  

    a. 单目运算符 (只有一个操作数)
    
        + :  正   +5 
        - :  负   -5 
        
        ++ : 自增 +1 
            
            int a = 10;
            a++;
            printf("%d\n", a);
            
            --------------------
            
            int a = 10;
            ++a; 
            printf("%d\n",a); 
            
            区别:
                int a = 10;
                int b = 5;
                
                int c = (a++) - 5;  // 6, 5 
                printf("a = %d", a)
                int d = (++a) - 5;  // 5, 6 
                
                printf("c = %d", c);  5 
                printf("d = %d", d);  6
                
                注:
                    ++a 与 a++ 不一样 
                    ++a: 先++ 然后再计算 
                    a++: 先计算, 然后再++
                int a = 5; 
                
                int x = (++a) + (++a) + (++a);  // 18, 21, 24 , 22
                
        --: 自减 1
            
            --a
            a--
            
        *: 取地址符号
        &: 取变量地址符号  
        
        !: 非  取反,    
            非 0 即 真             
            !5
            
            False  True   C89     
            
        ~: 按位取反 
            
            unsigned char a = 10;
            
            ~a:
            0000 1010
            
            1111 0101: 0xf5  实际结果: 0xffff fff5 
            
            // 整形提升:
            1111 1111 1111 1111 1111 1111 1111 0101 
            f f f f f f f5 
            
            %d 
            补码:    1111 1111 1111 1111 1111 1111 1111 0101 
            反码:  1111 1111 1111 1111 1111 1111 1111 0100
            源码:    1000 0000 0000 0000 0000 0000 0000 1011
            --------------------------------------------------
                                                        -11 
                                                        
            
            
                
            
            
        
6.5 上午内容复习        
        
    a.变量 
        
        i.
            像内存中申请空间 , 数据类型 大小的空间
        
        ii.  
            <存储类型>    <数据类型> <标识符>
            
    b. 常量 
    
        i. 字面常量 
            100 0b1010    3.14  'a' 'b'
        
        ii. 字符串常量 
            "hello world" "cpdd"
        
        iii. 宏常量 
            
            #define M 10 
            #define N M+10 
            #define ADD(X,Y) (X+Y)
            
    c. 输出 
        printf 
            %s     字符串 
            %d  数字 
            %c  字符 
            %p  地址  
            
    d. 运算符 
        
        1. 单目运算符 
            
            + 
            -
            
            ++
            --
            
            * 
            &

7. 算数运算符: 
    
    + 
    -
    *
    /: 整除
        9/2 = 4
        9.0/2 = 4.5
        
    %: 取余  
        demo : 
            int a = 123;
            int g = a % 10;
            int s = a/10 %10
            int b = a /100 
            
8.移位运算符 二进制 
    
    左移运算符: 
            << 

            char a = 5 
            
            a:    0000 0101 
            <<            1
            ----------------
                0000 1010 
                
                5 << 2 : == 5 * 2 * 2 = 20 
                10 << 3 : == 10 * 2 * 2 * 2 = 80 
                
            0000 1010 
            <<         3
            ---------
            0101 0000
            ---------
             64 + 16 = 80 
             
    
    右移运算符 
            :补充的是符号位  
            
            >> 
            
            short a = 9 ;
            
            a >> 2 
            
            0000 0000 0000 1001 
            >>                   2
            --------------------
            0000 0000 0000 0010
            
            9/2/2 = 2 
            
        
    负数移动:
        
        int x = -3: 
        
        右移 2位 
        
        源码: 1000 0000 0000 0000 0000 0000 0000 0011
        反码: 1111 1111 1111 1111 1111 1111 1111 1100
        补码: 1111 1111 1111 1111 1111 1111 1111 1101| 
              >>                                    2|
              ---------------------------------------|-
              111111 1111 1111 1111 1111 1111 1111 11|01 
        
                    
        左移 2位            
                
        源码: 1000 0000 0000 0000 0000 0000 0000 0011
        反码: 1111 1111 1111 1111 1111 1111 1111 1100
        补码: |1111 1111 1111 1111 1111 1111 1111 1101| 
              |<<                                    2
              |-----------------------------------------
            11|11 1111 1111 1111 1111 1111 1111 110100  

            int b = 0x8000 0001
            1000 0000 0000 0000 0000 0000 0000 0001 
            <<                                       1
            ----------------------------------------
    总结:
        左移补0    右移补充符号位 
        
9.关系运算符: 
    >
    <
    >=
    <=
    !=
    == : 等于 
    
    if (a = 5) 

10.与运算符  (按位与) &
    
    &: 0 与 任何数相与都是 0, 1与任何数相与 都是 任何数:
    两真切为真 
    
    char a = 9;
    char b = 5;
    
    a & b : 
            a:     0000 1001 
            b:    0000 0101
            ---------------
                0000 0001

11.异或运算符 (按位运算)^

    相同为假,相异为真 
    
    char a = 10;
    char b = 9;
    
    a ^ b :
    
    0000 1010
    0000 1001
    -------------
    0000 0011
    
    
    异或性质:
        1. 0 异或任何数都能与任何数: 
        
        2. 异或两个相同的数字,会为0 且异或与顺序没有关系  
        
        
        0 ^ 5 ^ 5: 0
        
        0^ 5 ^ 6 ^ 5: 
        
        0000 0101
        0000 0110
        ---------
        0000 0011
        0000 0101
        -----------
        0000 0110
        
    demo:
        int a = 10;
        int b = 5 ;
        
    交换这两个数字:
        
        int temp = a;
        a = b;
        b = temp; 
        
    要求: 不定义临时变量 
    
        a = a + b;  a = 10  b = 5   
                    a = 15  b = 5
        b = a - b;  b = 10  a = 15 
        a = a - b;  a = 5  b = 10 
        
        

        0111 1110
        0000 0010
        ---------
        1000 0000 
        
        -128 

    有没有什么办法改进         字节 > 腾讯 > 阿里  
    

    3).
        int a = 10; 
        int b = 5;

        a = a ^ b;
        b = a ^ b; 
        a = a ^ b;


11.或运算符 (位运算符)|

    1 与 任何数相或 都为1, 0与任何数相或都等于 任何数  
    
    char a = 10;
    char b = 5;
    
    a | b : 
    
        0000 1010
        0000 0101
        ---------
        0f 
    
demo:
    
    (1)int a = fff5 40ff 将第7位置为 0 , 将这个数的第8位置位1  
        
        a: 1111 1111 1111 1111 0101 1000 1111 1111 
           1111    1111 1111 1111 1111 1111 0111 1111 
        -------------------------------------------
           0000 0000 0000 0000 0000 0000 1000 0000
           
        (a & ~(1 <<7)) 

        
        a: 1111 1111 1111 1111 0101 1000 1111 1111 |
                                       1 0000 0000    
    
        (a | (1 << 8))
        
    (2)unsigned char a = 1011 0101 现高低位翻转 
                             
        1011 0101
        1010 1101 
            
        思路:
            相邻位交换
            相邻两位交换
            相邻四位交换 
            
            1011     0101 
            7654    3210 
            
        相邻位交换    
            0111    1010
            6745    2301 
        相邻两位交换
            1101    1010
            4567    0123
        相邻四位交换    
            1010 1101
            0123 4567 
        
        交换相邻的两位: 
            奇位数字向左移, 偶位数字向右移 
                        
            1011     0101 
            7654    3210 
            
        
            1011 0101 
           &1100 1010 
           ---------- >> 1 
           
    
           1011 0101 
          &0101 0101
          ----------  
                    << 1

12.逻辑运算符 
    
    逻辑&& 
        两个条件都成立的成立的时候才为真  
    
    逻辑|| 
        两个条件有一个条件成立,他就会成立 
        
    短路原则:
    
        int a = 10;
        int b = 5;
        
        if (a > 0 && a < 20)
        {
            printf("hehe");
        }
    
        a = 10;
        if (a > 20 && a = 50)
        {
            printf("bye bye");
        }
        printf("a = %d\n", a);       50 / 10 
        
        
        if (a < 20 || a = 50)    
        {
            printf("hehe");
        }
        printf("a = %d\n",a);
        
13.条件运算符 三目运算符 
    格式: 
        ? : 
    判断问号前内容是否成立, 如果成立 则执行 : 前, 否则执行 : 后面的内容 
    
    
    int a = 10;
    int b = 20;
    int c = a > b ? a : b ;
    
    int min = a < b ? a : b;

14.赋值运算符 
    +=
    -=
    *=
    /=
    >>=
    <<=
    =
    
15.逗号运算符 
    ',': 一次执行内容,返回值是最后一个, 后面的值
    
    int a = (10, 20 ,30 ,40 ,50);
      
        
        
        
        
        

上一篇:Day01


下一篇:DMCTF部分WP