字符串和代码的表示

2022-08-09  本文已影响0人  Sun东辉

C 语言中字符串被编码为一个以 null( 其值为 0) 字符结尾的字符数组,每个字符都由某个标准编码来表示,最常见的是 ASCII 字符码。因此,如果我们以参数 "12345" 和 6(包括终止符)来运行例程 show_bytes,我们得到结果 31 32 33 34 35 00。请注意,十进制数字 x 的 ASCII 码正好是 Ox3x,而终止字节的十六进制表示为 Ox00。在使用 ASCII 码作为字符码的任何系统上都将得到相同的结果,与字节顺序和字大小规则无关 因而,文本数据比二进制数据具有更强的平台独立性。

考虑下面的 C 函数:

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

当我们在示例机器上编译时,生成如下字节表示的机器代码:

我们发现指令编码是不同的。不同的机器类型使用不同的且不兼容的指令和编码方式。即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则,因此二进制代码是不兼容的。二进制代码很少能在不同机器和操作系统组合之间移植。

计算机系统的一个基本概念就是,从机器的角度来看,程序仅仅只是字节序列。机器没有关于原始源程序的任何信息,除了可能有些用来帮助调试的辅助表以外。在第 3 章学习机器级编程时,我们将更清楚地看到这一点。

上一篇 下一篇

猜你喜欢

热点阅读