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

    你可能感兴趣的文章
    Neo4j的安装与使用
    查看>>
    Neo4j(1):图数据库Neo4j介绍
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo4j(4):Neo4j - CQL使用
    查看>>
    Neo图数据库与python交互
    查看>>
    NEO改进协议提案1(NEP-1)
    查看>>
    Neo私链
    查看>>
    NervanaGPU 项目使用教程
    查看>>
    Nerves 项目教程
    查看>>
    nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
    查看>>
    nestesd exception is java .lang.NoSuchMethodError:com.goolge.common.collect
    查看>>
    nestJS学习
    查看>>
    net core 环境部署的坑
    查看>>
    NET Framework安装失败的麻烦
    查看>>
    Net 应用程序如何在32位操作系统下申请超过2G的内存
    查看>>
    Net.Framework概述
    查看>>
    NET3.0+中使软件发出声音[整理篇]<转>
    查看>>