C语言基础知识

本文介绍:C语言基础知识:注释、变量、数据类型、数据类型长度、可移植类型、常量、数值表示、二进制、八进制、十六进制转换、数值储存、原码、反码、补码

一、入手第一个代码练习

第一个C语言程序:HelloWorld

#include <stdio.h>

int main() {
    printf("hello world\n");

    return 0;
}

C语言的源代码文件是一个普通的文本文件,但扩展名必须是 .

代码分析:

1.include头文件包含

  • #include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件
  • 使用C语言库函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件
  • 头文件:在c语言中后缀名为h的文件被称为头文件,头文件就像一本书的目录,当我们想使用某本书里的内容时,只需把目录(头文件)引进来就可以了。
  • 2.main函数

  • 程序的入口,一个程序有且只有一个main函数入口
  • {}叫代码块,一个代码块内部可以有一条或者多条语句
  • 所有的可执行语句必须是在代码块里面
  • C语言每句可执行代码都是";"分号结尾
  • 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
  • 3.printf函数
  • printf是C语言库函数,功能是向标准输出设备输出一个字符串
  • printf(“hello world\n”);
  • \n的意思是回车换行
  • 4.return语句
  • return代表函数执行完毕,返回return代表函数的终止
  • 在main函数中return 0代表程序执行成功
  • 二、注释

  • 介绍 :对代码的解释和说明
  • 特点:不会被执行
  • 目的:让人们能够更加轻松地看懂代码
  • 分类:行注释 //  快键键 ctrl+/  和 块注释 /**/  快捷键Ctrl + Alt +A
  • #include <stdio.h>
    
    int main() {
        // 行注释 这是单行注释 
    
    
        /*
         这是多行注释
            块注释
        */
    
        return 0;
    }

    三、数据类型

  • 简单介绍一下C语言有哪些常用类型
  • 1.数据类型的作用:编译器预算数据分配的内存空间大小(重点)
  • 2可以通俗理解为:数据类型是用来规范内存的开销,约定数据在内存中的格式,便于存储。
  • 四、变量(重要)

  • 一、变量的语法

  • 1.在计算机程序中,变量是用来存储数据的一个内存区域,并用一个名字来表示这个区域
  • #include <stdio.h>
    
    int main() {
        // 1. 定义1个int变量age同时赋值为18(这叫初始化),然后打印内容
        int age = 18;
        printf("%d\n", age);
        // 2. 修改age的内容为20,然后打印内容
        age = 20;
        printf("%d\n", age);
        // 3. 定义2个int变量,然后在分别赋值,然后再打印内容
        int a, b;
        a = 123;
        b = 256;
        printf("%d\n", a);
        printf("%d\n", b);
        // 4. 定义1个float类型变量height同时赋值,然后打印内容
        float height = 1.77;
        printf("%f\n", height);
    
        return 0;
    }

  • 二、特点

  • 1.变量在使用前必须先定义,定义变量前必须有相应的数据类型;
  • 2.在程序运行过程中,其值可以改变;
  • 三、命名规则

  • 一、忌讳
  • 1.只能由数字、字母、下划线_组成;
  • 2.不能使用数字开头;
  • 3.不能使用关键字
  • 二、建议
  • 1.大驼峰
  • 每个单词首字母大写, 例如: MyFirstName
  • 2.小驼峰
  • 第二个单词开始首字母大写, 例如: myFirstName
  • 3.下划线命名
  • 每个单词之间使用下划线连接, 例如: my_first_name
  • 特殊类型 布尔类型(Bool)

  • 布尔类型是一种处理逻辑的类型,其有两个值,分别是真(true)或假(false),它在内存中的长度一般只占用1个字节。

  • 早期C语言没有布尔类型数据,以0代表逻辑假,非0代表逻辑真;
  • C99标准定义了新的关键字_Bool,提供了布尔类型,或者也可以使用stdbool.h中的bool;
  • #include <stdio.h>
    // bool 类型需要添加以下这个才能使用
    #include <stdbool.h>
    
    int main() {
        // 定义一个bool类型变量,同时赋值为true,然后打印变量的值
        bool flag = true;
        printf("%d\n", flag); //输出 1
    
        // 修改上一步变量的值为false,然后打印变量的值
        flag = false;
        printf("%d\n", flag); //输出 0
    
        return 0;
    }

    五、数据类型长度

  • 存储单位说明

  • 基本数据类型长度

  • 数据类型的长度会受操作系统平台的影响,所以在不同平台下基本数据类型的长度是不一样的。
  • sizeof输出类型长度(大小)

  • #include <stdio.h>
    
    int main() {
        // 通过sizeof打印各种类型的长度(大小)
        printf("char length = %d\n", sizeof(char));
        printf("short length = %d\n", sizeof(short));
        printf("int length = %d\n", sizeof(int));
        printf("long length = %d\n", sizeof(long));
        printf("float length = %d\n", sizeof(float));
        printf("double length = %d\n", sizeof(double));
        printf("long double length = %d\n", sizeof(long double));
    
        // 定义int类型变量,sizeof打印变量的大小
        int a;
        printf("a length = %d\n", sizeof(a));
    
        return 0;
    }

    六、可移植的类型

  • 最开始我们介绍C语言是一门跨平台的编程语言,使用C语言编写的程序可以在不同的系统平台下运行,这里有一些前提,为了更好的兼容不同平台,我们在使用基本上数据类型的时候会采用可移植的类型,这些类型可以确保在不同的平台下稳定的运行。

  • C语言在可移植类型头文件 stdint.h 和 inttype.h 中规定了精确宽度整数类型,以确保C语言的类型在各系统内功能相同。
  • #include <stdio.h>
    #include <inttypes.h>
    
    int main() {
        // 8位整型
        int8_t a=127;
        printf("%d\n", sizeof(a));
    
        // 16位整型
        int16_t b = 127;
        printf("%d\n", sizeof(b));
    
        // unsigned 无符号,没有符号位,数值为正数
        uint8_t c = 255;
        uint16_t d = 200;
    
        return 0;
    }

    七、常量

  • 与变量不同,常量的值在程序运行时不会改变。

  • 常量的定义方式有两种:

  • 1.自定义常量

    // 预处理常量
    #define PI 3.14
    
    // const常量
    const double pi2 = 3.14;
    #include <stdio.h>
    // 预处理常量
    #define PI 3.14
    
    int main() {
        // const常量
        const double pi2 = 3.14;
    
        // 常量不能修改,以下代码是错误的
        PI = 3.33;
        pi2 = 3.33;
    
        return 0;
    }

    2.系统定义的常量

  • #include <stdio.h>
    #include <float.h>
    #include <limits.h>
    
    int main() {
        // 打印float类型能够表示的最大值和最小值
        printf("%lf\n", FLT_MIN);
        printf("%lf\n", FLT_MAX);
        // 打印char类型位数以及能够表示的最大值和最小值
        printf("%d\n", CHAR_BIT);
        printf("%d\n", CHAR_MIN);
        printf("%d\n", CHAR_MAX);
        // 打印short类型能够表示的最大值和最小值
        printf("%d\n", SHRT_MIN);
        printf("%d\n", SHRT_MAX);
        // 打印int类型能够表示的最大值和最小值
        printf("%d\n", INT_MIN);
        printf("%d\n", INT_MAX);
        // 打印long类型能够表示的最大值和最小值
        printf("%ld\n", LONG_MIN);
        printf("%ld\n", LONG_MAX);
    
        return 0;
    }

    八、数值表示

  • 进制

  • 进制也就是进位制,是人们规定的一种进位方法
  • 对于任何一种进制—X进制,就表示某一位置上的数运算时是逢X进一位
    • 二进制就是逢二进一,八进制就是逢八进一,十进制是逢十进一,十六进制是逢十六进一,以此类推,x进制就是逢x进位
    • 1.二进制

    • 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数
    • 它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
    • 当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的
    • 十进制转化二进制的方法:
    • 用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
    • 2.八进制

    • 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1
      • 一些编程语言中常常以数字0开始表明该数字是八进制
    • 八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中
    • 八进制和二进制互转:
    • 十进制转化八进制的方法:
      • 用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
      • 3.十六进制

      • 十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写
        • 与10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15
      • 十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中
      • 十六进制和二进制互转:
      • 十进制转化十六进制的方法:
        • 用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
      • C语言如何表示相应进制数

      • #include <stdio.h>
        
        int main() {
            // 十进制方式赋值
            int a = 15;
            // 八进制方式赋值
            int b = 017;
            // 十六进制方式赋值
            int c = 0xf;
            // 二进制方式赋值
            int d = 0b1111;
            printf("%d, %d, %d, %d\n", a, b, c, d);
        
            return 0;
        }

        九、数值存储方式

      • 计算机底层都是存储数据都是采用二进制,但二进制也有几种,比如:原码、反码、补码。接下来我们来看看他们之间的关系的意义作用。

      • 1.原码(十进制转二进制)

      • 十进制数按照:除二取余、倒序排列,得到的就是原码。

      • 10 -> 0000 1010
      • -10 -> 1000 1010
      • -1 -> 1000 0001
      • 1 -> 0000 0001
      • 问题
      • 原码在做计算的时候会出现一些问题,比如正负数的加法运算,以及零的问题。

      • 正负数加法
      • -1 + 1 = 0
      •   1000 0001
        + 0000 0001
        ----------------
          1000 0010 -> -2 ?

      • 正负零
      • +0 和 -0
      • 0000 0000
        1000 0000

      • 2.反码(原码)

      • 为了解决上面的问题,出现了反码,反码的计算规则如下:

      • 正数的反码就是原码本身;
      • 负数的反码是按位取反(但符号位不变);
      • 示例

      • 1 -> 0000 0001 -> 0000 0001
      • -1 -> 1000 0001 -> 1111 1110
      •   0000 0001
        + 1111 1110
        -----------------
          1111 1111

        111 1111 是运算完之后的结果,但要注意,这时还是反码,需要重新返回来:1000 0000 。

        反码解决了正负数加法问题,但正负零的问题还是存在。

      • 3.补码

      • 正数的补码就是原码本身;

        负数的补码就是在反码的基础上+1;

      • 1 -> 0000 0001 -> 0000 0001 -> 0000 0001
      • -1 -> 1000 0001 -> 1111 1110 -> 1111 1111
      •   0000 0001
        + 1111 1111
        ----------------
          0000 0000

        补码在正负数加减法运算时没问题,也不会出现正负零占两个二进制。但 1000 0000 不表示为负零,用来表示什么呢?计算机其实默认把8位有符号二进制 1000 0000 表示为 -128 。

      • int8_t e = 0b10000000;
        printf("%d\n", e);

  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值