当前位置 博文首页 > CW_qian的博客:7月16日笔记C语言基础数据类型

    CW_qian的博客:7月16日笔记C语言基础数据类型

    作者:[db:作者] 时间:2021-08-25 21:47

    1. 整型

    • 概念:表达整数类型的数据
    • 语法:

    int?a = 123; // 定义了一个专门用来存储整数的变量a

    • 需要注意的地方:
    1. int 的本意是 integer,即整数的意思
    2. int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。
    3. 变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。
    4. 变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647
    • 整型修饰符
      • short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为短整型
      • long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长整型
      • long long:用来增长整型变量的尺寸,增大取值范围并占用更多内存,称为长长整型
      • unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数

    short?int?a; // 短整型

    long?int?b; ?// 长整型

    long?long?int?c; // 长长整型

    unsigned?int?e; ?// 无符号整型

    unsigned?short?int?f; // 无符号短整型

    unsigned?long?int?g; ?// 无符号长整型

    unsigned?long?long?int?h; // 无符号长长整型

    • 使用整型修饰符后,关键字 int 可以被省略

    short?a; // 短整型

    long?b; ?// 长整型

    long?long?c; // 长长整型

    unsigned?e; ?// 无符号整型

    unsigned?short?f; // 无符号短整型

    unsigned?long?g; ?// 无符号长整型

    unsigned?long?long?h; // 无符号长长整型

    • 符号位:
      • 有符号的整型数据,首位为符号位,0表示正数,1表示负数。2^31-1
      • 无符号的整形数据,没有符号位。2^32-1
    • 编码形式:
      • 原码:正数直接使用二进制来表达,比如a=100,在内存中是 00…001100100
      • 补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11…1111111101
      • 注意负数的补码在取反加一的时候,符号位是不动的
    • 溢出:
      • 超过数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的
    • 进制:源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是二进制
      • 十进制(默认),比如1099
      • 八进制,比如013
      • 十六进制,比如0x6FF0A
    • 格式控制符
      • int 整型:%d
      • short 整型:%hd, h代表half,即一半的存储字节
      • long 整型:%ld
      • long long 整型:%lld
      • 显示不同进制的前缀: %#o、 %#x

    2. 浮点型

    • 概念:用来表达实数的数据类型
    • 分类:
      • 单精度浮点型(float),典型尺寸是4字节
      • 双精度浮点型(double),典型尺寸是8字节
      • 长双精度浮点型(long double),典型尺寸是16字节
      • 占用内存越多,能表达的精度越高

    float?f1?= 3.1415926; // 单精度

    Printf(%.3f\n,f1); // 3.142 ,四舍五入

    double?f2; // 双精度

    long?double?f3; // 长双精度

    浮点类型

    最小精度

    最大数值

    float

    10^{-37}10?37

    10^{38}1038

    double

    10^{-307}10?307

    10^{308}10308

    long double

    10^{-4931}10?4931

    10^{4932}104932

    3. 字符?字符是用’’单引号描述

    char?ch1 = 'a'; ?// 'a'是字符常量,代表字母a

    char?ch2 = '\n'; // '\n'是不可见字符常量,代表回车

    计算机中存储的都是1和0,因此各种字符都必须被映射为某个数字才能存储到计算机中,这种映射关系形成的表称为 ASCII 码表。

    字符本质上就是一个单字节的整型,支持整型所有的运算。比如:

    char?c1 = 20;

    char?c2 = c1 + 'a'; // 等价于 char c2 = 20 + 97;

    printf("%c\n", c2); // 以字符形式输出117,即 'u'

    printf("%d\n", c2); // 以整型形式输出117

    4. 字符串??字符串是用双引号

    • 定义

    // 字符串的定义方式有两种:指针和数组

    char?*s1 = "abcd"; // 使用字符指针来表示字符串

    char?s2[]= "abcd"; // 使用字符数组来表示字符串

    注意:所有类型(char * || int*||float *||double *)的指针在32位系统都是占用4字节,在64位系统是占用8字节

    // 注意,使用数组来定义字符串时,方括号[]里面的数字可以省略

    // 不省略也可以,但必须必字符串实际占用的内存字节数要大,比如:

    char?s3[] = "apple";

    • 在内存中的存储
      • 在内存中实际上是多个连续字符的组合
      • 任何字符串都以一个 ‘\0’ 作为结束标记,例如:“funny story” 的内存如下

    5. 布尔型数据

    头文件:#include <stdbool.h>

    • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
    • 语法:

    bool?a = 1; // 逻辑真,此处1可以取其他任何非零数值

    bool?b = 0; // 逻辑假

    • 注意:
    1. 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
    2. 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
    • 布尔型数据常用语逻辑判断、循环控制等场合。

    6. 常量与变量

    • 概念:不可改变的内存称为常量,可以改变的内存称为变量
    • 举例:

    int?a = 100; ???// a是变量,而100是常量

    float?f = 3.14; // f是变量,而3.14是常量

    char?s[] = "abcd"; // s是变量,"abcd"是常量

    • 常量的类型

    常量举例

    说明

    类型

    100

    整型

    int

    100L

    长整型

    long

    100LL

    长长整型

    long long

    100ULL

    无符号长长整型

    unsigned long long

    3.14

    双精度浮点型

    double

    3.14L

    长双精度浮点型

    long double

    ‘a’

    字符型

    char

    “abcd”

    字符指针(字符串)

    char *

    7. 标准输入

    • 概念:键盘是系统的标准输入设备,从键盘中输入数据被称为标准输入
    • 相关函数:

    man -f scanf

    man 3 scanf

    scanf(); // 格式化输入函数

    fgets(); // 字符串输入函数

    int?a;

    float?f;

    scanf("%d", &a); ??// 从键盘输入一个整型,放入指定的内存地址 &a 中

    scanf("%f", &f); ??// 从键盘输入一个浮点数,放入指定的内存地址 &f 中

    scanf("%d%f", &a, &f); // 从键盘依次输入一个整型和一个浮点型数据,用空白符隔开

    char?c;

    char?s[10];

    scanf("%c", &c); ?// 从键盘输入一个字符,放入指定的内存地址 &f 中

    scanf("%s", s ); ?// 从键盘输入一个单词,放入指定的数组 s 中(注意不是&s)

    fgets(s, 10, stdin); // 从键盘输入一行字符串,放入数组 s 中

    • 注意1:
      • scanf() 与 printf() 不同,scanf() 的格式控制串不可乱写,尤其是结尾处的 \n
      • 用户必须完全按照 scanf() 中描述的输入格式控制串来输入数据,否则将出错。
      • 示例:

    // 此处输入时必须带逗号

    scanf("%d,%d", &a, &b);

    // 此处必须先输入a=,然后才能输入整数

    scanf("a=%d", &a);

    下一篇:没有了