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

    你可能感兴趣的文章
    mysql5.5和5.6版本间的坑
    查看>>
    mysql5.5最简安装教程
    查看>>
    mysql5.6 TIME,DATETIME,TIMESTAMP
    查看>>
    mysql5.6.21重置数据库的root密码
    查看>>
    Mysql5.6主从复制-基于binlog
    查看>>
    MySQL5.6忘记root密码(win平台)
    查看>>
    MySQL5.6的Linux安装shell脚本之二进制安装(一)
    查看>>
    MySQL5.6的zip包安装教程
    查看>>
    mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
    查看>>
    Webpack 基本环境搭建
    查看>>
    mysql5.7 安装版 表不能输入汉字解决方案
    查看>>
    MySQL5.7.18主从复制搭建(一主一从)
    查看>>
    MySQL5.7.19-win64安装启动
    查看>>
    mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
    查看>>
    MySQL5.7.37windows解压版的安装使用
    查看>>
    mysql5.7免费下载地址
    查看>>
    mysql5.7命令总结
    查看>>
    mysql5.7安装
    查看>>
    mysql5.7性能调优my.ini
    查看>>
    MySQL5.7新增Performance Schema表
    查看>>