博客
关于我
【C语言进阶学习笔记】一、数据的存储(1)
阅读量:823 次
发布时间:2019-03-25

本文共 1662 字,大约阅读时间需要 5 分钟。

C语言进阶学习笔记

一、数据类型分类

C语言中的数据类型主要分为两大类:

  • 内置类型:由C语言本身提供,常见类型包括:

    • 结构化类型:char, short, int, long, float, double, bool
    • 构造类型:struct, union, enum
    • 空类型:void
  • 自定义类型:由程序员定义的类型,如typedefstruct,用于解决内置类型的不足。

  • 类型的意义

    • 决定内存分配的大小。
    • 标识变量的数据属性,有助于编译器和预编译器的优化。

    二、数据类型细分类

    1. 整型家族
    • 常规类型char, short, int, long
    • 无符号类型unsigned char, unsigned short, unsigned int, unsigned long
    • char类型:在底层用8位存储,ASCII码对应的整数,其符号由编译器确定。
    2. 浮点型家族
    • 常规类型float, double
    • 无符号性质:浮点型无法区分符号,只能表示正数。
    3. 构造类型
    • 结合多种数据类型的存储和处理,如struct用于结构体,union用于联合体类型,enum用于枚举类型。
    4. 指针类型
    • 指针用于存储内存地址,支持数组和结构体操作。
    5. 空类型
    • void类型用于占位,默认不分配任何内存。

    三、整型在内存中的存储

    1. 原反补码转换
    • 原码:直接表示正负数值。
    • 反码:变号后的二进制取反。
    • 补码:反码加1后得到,常用于存储有符号数。

    由于补码的优势,计算机统一用补码存储和运算,减少硬件复杂度。

    2. 大小端存储
    • 大端(MSB先):低位存内存的高地址。
    • 小端(LSB先):低位存内存的低地址。
    • 常见于x86系统,而ARM等架构支持选择。

    判断端模式:

    int main() {    int a = 1;    char* p = (char*)&a;    printf("%d", *p); // 如果0,说明小端,1则大端    return 0;}

    四、练习题解答

  • 代码分析
  • char a = -1;signed char b = -1;unsigned char c = -1;// 在Visual Studio下,char、signed char、unsigned char占用相同字节数(1字节)// 输出:a = -1, b = -1, c = -1(实际值取决于编译器定义)
    1. char范围测试
    2. char a = 128; // 输出为 )|(如果编译通过,可能导致无法正确定义,需避免负值)// char默认为`signed`,-128到127取值
      1. 运算符优先级
      2. int main() {    int i = -20;    unsigned int j = 10;    printf("%d", i + j); // 输出-10}
        1. 无符号整型循环问题
        2. unsigned int i = 0;for (i = 9; i >=0; i--) {    // 死循环,因无符号数恒≥0}
          1. 字符串长度计算
          2. char arr[1000];for (int i = 0; i < 1000; i++) {    arr[i] = -1 - i;}// 数组元素从-1到0,`strlen`在遇到\0时停止,计算长度255(包括\0)
            1. 打印循环使用Sleep
            2. unsigned int i = 0;for (i = 9; i >=0; i--) {    printf("%u\n", i);    Sleep(1000);}
              1. 无限循环测试
              2. unsigned int i = 0;for (i =9; i <=255; i++) {    // 死循环打印“hello world”}

                总结

                本章涵盖了C语言中核心的数据类型分类、存储方式以及大小端问题,理解这些概念有助于更好地进行内存管理和跨平台开发。尽管我在细节处理上仍需加强,但通过不断实践,我相信能够逐步掌握这些重要知识点。

    转载地址:http://jliuk.baihongyu.com/

    你可能感兴趣的文章
    Pandas数据分析的环境准备
    查看>>
    Pandas数据可视化怎么做?用实战案例告诉你!
    查看>>
    Pandas数据处理与分析教程:从基础到实战
    查看>>
    Pandas数据结构之DataFrame常见操作
    查看>>
    pandas整合多份csv文件
    查看>>
    pandas某一列转数组list
    查看>>
    Pandas模块,我觉得掌握这些就够用了!
    查看>>
    Pandas玩转文本处理!
    查看>>
    SpringBoot 整合 Mybatis Plus 实现基本CRUD功能
    查看>>
    pandas的to_sql方法中使用if_exists=‘replace‘
    查看>>
    Springboot ppt转pdf——aspose方式
    查看>>
    pandas读取csv编码utf-8报错
    查看>>
    pandas读取parquet报错
    查看>>
    pandas读取数据用来深度学习
    查看>>
    pandas读取文件时,不去掉前面的0 保留原有的数据格式
    查看>>
    Pandas进阶大神!从0到100你只差这篇文章!
    查看>>
    spring5-介绍Spring框架
    查看>>
    pandas,python - 如何在时间序列中选择特定时间
    查看>>
    Spring 框架之 AOP 原理深度剖析
    查看>>
    Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
    查看>>