当前位置 博文首页 > HyDraZya的博客:【C语言基础】C语言初步认识(2)

    HyDraZya的博客:【C语言基础】C语言初步认识(2)

    作者:[db:作者] 时间:2021-09-05 09:45

    目录

    1.按位取反

    ?2.自动运算

    3.逻辑运算符

    4.条件运算符

    5.下标引用、函数调用运算符

    6.关键字

    7.常用关键字

    8.#define定义常量

    9.指针?

    10.计算机 存储数据


    1.按位取反

    ~: 按(2进制)位取反

    • 整型数据数值是以补码的形式表示的,正数补码与原码相同
    • 对于有符号正数,计算机内存中最左边表示符号位,0为正 1为负
    • 负数的补码是将该数绝对值的二进制形式按位取反后再加1得到的
    • 整数的补码是将该数绝对值的二进制形式安慰去饭后再减1得到的
    • 原码直接按照正负写出的二进制序列(符号位不变)
    • 负数在计算机存储中用补码存储
    #include <stdio.h>
    int main()
    {
    //补码 ——> 反码 ——> 原码码
    //负数在内存中存储的时候,存储的是二进制的代码
    //00000000000000000000000000000000 -二进制码
    //11111111111111111111111111111111 -补码
    //11111111111111111111111111111110 -反码
    //10000000000000000000000000000001 -原码(反码-1)
    
       int a = 0;
       int b = ~a;
       printf("%d\n", b);
    
       return 0;
    }

    ?2.自动运算

    • 后置++:a的值赋予b,然后再给a+1
    • 前置++:先给a+1,再赋a+1的值予b
    • 后置--:a的值赋予b,然后再给a-1
    • 后置--:先给a-1,再赋a-1的值予b
    #include <stdio.h>
    int main()
    {
       int a = 10;
       int b = a++;//后置++,先使用,再++
       //a = 11,b = 10
    
       int b = ++a;//前置++,先++,后使用
       //a = 11,b = 11
    
       int b = a--;//后置--,先使用,再--
       //a = 9 ,b = 10
    
       int b = --a;//前置--,先--,后使用
       //a = 9 , b = 9
    
       printf("a = %d b = %d\n", a, b);
       return 0;
    }

    ??3.逻辑运算符

    #include <stdio.h>
    int main()
    {
       //真 - 非0
       //假 - 0
       //&& - 逻辑与
       //|| - 逻辑或
       int a = 0;
       int b = 5;
       int c = a || b;
       printf("c = %d\n", c);//逻辑中两变量都为1则为1,只要有一个为0则为0
    
       int c = a && b;
       printf("c = %d\n", c);//逻辑中两变量其中一个为1则为1,否则为0
    
       return 0;
    }

    4.条件运算符

    #include <stdio.h>
    int main()
    {
       int a = 10;
       int b = 20;
       int max = 0;
       max = (a > b ? a : b);
       //同等于
       if (a > b)
       {
          max = a;
       }
       else
       {
          max = b;
       }
    
       printf("最大值是:%d\n", max);
       return 0;
    }

    5.下标引用、函数调用运算符

    • [ ]:下标引用操作符
    • ( ):函数调用操作符
    #include <stdio.h>
    int Add(int x,int y)
    {
       int z = 0;
       z = x + y;
       return z;
    }
    int main()
    {
       int arr[10] = {0};
       arr[4];//[] - 下表引用运算符
    
       int a = 10;
       int b = 20;
       int sum =Add(a, b);//() -- 函数调用运算符
    
       return 0;
    }

    6.关键字

    关键字说明
    auto声明自动变量
    short声明短整型变量或函数
    int声明整型变量或函数
    long声明长整型变量或函数
    float声明浮点型变量或函数
    double声明双精度变量或函数
    char声明字符型变量或函数
    struct声明结构体变量或函数
    union声明共用数据类型
    enum声明枚举类型
    typedef用以给数据类型取别名/定义
    const声明只读变量
    unsigned声明无符号类型变量或函数
    signed声明有符号类型变量或函数
    extern声明变量是在其他文件正声明
    register声明寄存器变量
    static声明静态变量
    volatile说明变量在程序执行中可被隐含地改变
    void声明函数无返回值或无参数,声明无类型指针
    if条件语句
    else条件语句否定分支(与 if 连用)
    switch用于开关语句
    case开关语句分支
    for一种循环语句
    do循环语句的循环体
    while循环语句的循环条件
    goto无条件跳转语句
    continue结束当前循环,开始下一轮循环
    break跳出当前循环
    default开关语句中的“其他”分支
    sizeof计算数据类型长度
    return子程序返回语句(可以带参数,也可不带参数)循环条件

    7.常用关键字

    (1)typedef:类型定义 -类型重定义

    #include <stdio.h>
    int main()
    {
       typedef unsigned int u_int;
       unsigned int num1 = 0;
       u_int num2 = 0;
    
       return 0;
    }
    

    (2)static

    • static 修饰局部变量延长局部变量的生命周期
    • static 修饰全局变量改变了变量的作用域
    • 改变了变量的作用域让静态的全局变量只能在自己的所在的源文件内部使用 出了源文件就没法再使用了
    • static 修饰函数也是改变了函数的作用域
    • static修饰函数改变了函数的链接属性
    • 外部链接属性 ——> 内部链接属性

    代码1:

    #include <stdio.h>
    
    void test()
    {
       static int a = 1;//a 是一个静态的局部变量
       a++;
       printf("a =%d\n", a);//2 3 4 5 6
    }
    int main()
    {
       int i = 0;
       while (i<5)
       {
          test();
          i++;
       }
       return 0;
    }

    代码2:

    #include <stdio.h>
    void test()
    {
        static int i = 0;
        i++;
        printf("%d", i);
    }
    int main()
    {
        int i = 0;
        for(i = 0; i < 10; i++)
        {
            test();
        }
    
        return 0;
    }
    

    8.#define定义常量

    • #define?定义标识符常量

    • #define?可以定义宏-带参数

    #include <stdio.h>
    
    int Max(int x, int y)
    {
        if (x > y)
            return x;
        else 
            return y;
    }
    //宏的定义
    #define MAX(X,Y) (X>Y?X:Y)
    
    int main()
    {
        int a = 10;
        int b = 20;
        int max = Max(a, b);
        printf("max = %d\n", max);
        //宏的方式
        max = MAX(a, b);
        //max = (a>b?a:b)
        printf("max = %d\n", max);
        getchar();
        return 0;
    }
    

    9.指针?

    • 指针变量:一种是用来存放地址的变量
    • 指针大小在32位平台是4个字节,64位平台是8个字节
    #include <stdio.h>
    int main()
    {
        int a = 10;//申请了4个字节的空间
        printf("%p\n", &a);
        int* p = &a;//取地址(随机)
        //p是一个变量-指针变量
        printf("%p\n", p);
        *p = 20;//- 解引用操作符/间接访问操作符
        printf("a = %d\n", a);
    
        return 0;
    }

    ?

    10.计算机 存储数据

    • 硬盘
    • 内存——CPU
    • 高速缓存
    • 寄存器——CPU

    cs