我很难理解像C ++这样的编译器如何处理数据类型。 当从键盘输入任何东西时,输入数字123,我们在屏幕上看到相同的数字,但根据数据类型,它的存储方式不同。即使输入相同的键盘笔划,转换数据类型的算法是什么?为什么数字的存储方式不同,显示方式不同?例如,在上面的情况下,如果数字123是一个int类型,它将被存储为01111011(在1个字节中),但是如果它是字符串类型,它将被存储在3个字节(每个数字一个字节)。但在这两种情况下,我们都会在屏幕上看到相同的数字。计算机是否使用不同的字节来存储和显示数字? 我的问题是当我们输入任何数字时它是否通过ASCII表并查找该数字的字符代码然后编译器进行某种处理以将该数字存储在适当的数据类型中并显示该数字?
谢谢堆
答案 0 :(得分: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