1

我很难理解像 C++ 这样的编译器是如何处理数据类型的。当从键盘输入任何内容时,比如说数字 123,我们会在屏幕上看到相同的数字,但取决于数据类型,它的存储方式不同。即使输入了相同的键盘敲击,转换数据类型的算法是什么?为什么数字的存储方式和显示方式不同?例如,在上述情况下,如果数字 123 是 int 类型,它将存储为 01111011(1 个字节),但是如果它是字符串类型,它将存储在 3 个字节(每个数字一个字节)中。但在这两种情况下,我们都会在屏幕上看到相同的数字。计算机是否使用不同的字节来存储和显示数字?我的问题是,当我们输入任何数字时,它是否会通过 ASCII 表并查找该数字的字符代码,然后编译器会进行某种处理以将该数字存储在适当的数据类型中并显示该数字?

非常感谢

4

1 回答 1

1

你真的很想买一本关于编译器的书来正确回答这个问题,但特别是对于数字字符串,你会在编译的词法分析阶段这样做。

编译器扫描程序的文本并尝试形成标记,这些将是语法的基本构建块,因此字符串、{、数字等......

所以假设你得到这样的东西

int i = 10

您的编译器扫描此行并尝试创建标记。首先它扫描 i、n、t,然后当它到达空间时它停止,因为它会将空间视为分隔符。它根据其内部列表检查值“int”并生成适当的令牌。

它继续遍历字符串并检测变量 i、等号,然后是数字。

它告诉字符串“10”中的数字的方式可能是引号,但这取决于语言。

这就是为什么你有像 10L 或 10f 这样的东西来表明你正在创建一个 long 或 float 值。否则编译器无法分辨。

http://en.wikipedia.org/wiki/Lexical_analysis http://en.wikibooks.org/wiki/Compiler_construction

甚至可能是https://www.coursera.org/course/compilers

于 2013-02-01T06:07:18.697 回答