云计算百科
云计算领域专业知识百科平台

(学习笔记)2.1 信息存储(2.1.4 表示字符串& 2.1.5 表示代码)

文章目录

  • 线索栏
  • 笔记栏
    • 2.1.4 表示字符串
      • 1.编码方式
      • 2.示例分析
      • 3.平台独立性
      • 4.练习题2.7解答
      • 5.旁注:Unicode标准
    • 2.1.5 表示代码
      • 1.核心现象
        • 1)示例函数
        • 2)编译结果(十六进制机器码)
      • 2.重要结论
      • 3.根本观点
  • 总结栏

线索栏

  • C语言字符串表示:C语言中的字符串在内存中如何编码?其结尾标志是什么?
  • 平台独立性:为什么文本数据比二进制数据具有更强的平台独立性?
  • Unicode与UTF-8:什么是Unicode标准?UTF-8编码与ASCII码的兼容性如何?
  • 机器代码的差异:相同的C程序在不同机器/系统上编译,生成的机器代码会相同吗?这说明了什么?
  • 程序的本质:从机器的视角看,程序是什么?
  • 练习题:对于字符串 “abcdef”,调用 show_bytes会输出什么?

  • 笔记栏

    2.1.4 表示字符串

    1.编码方式

    (1)C语言中的字符串被编码为一个以 null(值0)​ 字符结尾的字符数组。 (2)每个字符由标准编码(如 ASCII)表示。

    2.示例分析

    (1)字符串 “12345”(包括终止符)的字节表示为:31 32 33 34 35 00。 (2)规律:十进制数字字符 ‘x‘的ASCII码正好是 0x3x。

    3.平台独立性

    (1)文本数据(字符串)比二进制数据平台独立性更强。 (2)原因:字符编码(如ASCII)是跨平台标准,不受机器字节顺序和字大小的影响。

    4.练习题2.7解答

    在这里插入图片描述 (1)const char *s = “abcdef”; (2)show_bytes((byte_pointer)s, strlen(s));// strlen不计算终止符 \\0 (3)输出将是字母 ‘a‘到 ‘f‘的ASCII码:61 62 63 64 65 66。 在这里插入图片描述

    5.旁注:Unicode标准

    (1)背景:ASCII编码无法满足多语言需求(如希腊语、中文)。 (2)Unicode:统一的字符集标准,为几乎所有语言的字符分配唯一编码(码点)。 (3)UTF-8:一种变长编码,是Unicode的一种实现方式。 关键优势:完全向后兼容ASCII。标准ASCII字符在UTF-8中仍用单字节表示,且编码值完全相同。

    2.1.5 表示代码

    1.核心现象

    同一个简单的C函数在不同机器和操作系统上编译,生成完全不同的机器代码字节序列。

    1)示例函数

    int sum(int x, int y) {
    return x + y;
    }

    2)编译结果(十六进制机器码)

    (1)Linux 32: 55 89 e5 8b 45 0c 03 45 08 c9 c3 (2)Windows: 55 89 e5 8b 45 0c 03 45 08 5d c3 (3)Sun: 81 c3 e0 08 90 02 00 09 (4)Linux 64: 55 48 89 e5 89 7d fc 89 75 f8 03 45 fc c9 c3

    2.重要结论

    (1)指令集差异:不同机器类型使用不兼容的指令和编码方式。 (2)系统调用差异:相同处理器在不同操作系统上可能有不同的应用程序二进制接口(ABI),影响编码。 (3)二进制代码不可移植:编译后的程序通常不能在机器和操作系统的其他组合上运行。

    3.根本观点

    对机器而言,程序仅仅是一个字节序列。​ 机器对源代码的逻辑一无所知。这是“信息就是位+上下文”的绝佳例证——相同的源代码位(逻辑),在不同的编译上下文(目标机器和操作系统)下,被解释为完全不同的机器指令(位模式)。


    总结栏

    本节对比了两种关键信息的表示:

  • 字符串(文本数据):其表示基于字符编码标准(如ASCII、UTF-8)。这种标准化赋予了文本数据强大的平台独立性,便于在不同系统间交换。
  • 机器代码(可执行程序):是“位+上下文”原则的深刻体现。相同的程序逻辑(源代码)在不同的硬件和系统上下文(指令集架构、操作系统ABI)下,被翻译成截然不同的机器指令位模式,导致二进制程序严重缺乏可移植性。
  • 理解字符串的表示是进行文件处理、网络通信的基础;而理解机器代码的表示差异,则是认识操作系统移植性、软件分发格式(如源码分发 vs. 二进制分发)以及后续学习编译、链接和机器级编程(第3章)​ 的重要前提。练习题2.7则是一个简单的实践,将字符串理论知识与之前学习的 show_bytes工具联系起来。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » (学习笔记)2.1 信息存储(2.1.4 表示字符串& 2.1.5 表示代码)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!