博客
关于我
【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 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>