博客
关于我
【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/

    你可能感兴趣的文章
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>