当我们将数据存储在内存中时。 它是如何存储的,因此它可以识别加载时的数据类型。 我想问的是自然数,整数,字符等数据类型如何存储在内存中。因此,从记忆中提取后,可以很容易地识别它们。
当我们在内存中看到时,我们看到的是十六进制数字。 我们如何将这些十六进制数与ASCII值或整数值或任何其他等相关联。
答案 0 :(得分:0)
由于所有数据都是用二进制编写的,因此char a
的编写方式与int 97
的编写方式没有太大区别,因为它们代表相同的二进制字符串(至少这些字符串的最后8位)。话虽这么说,当你从内存中读取数据时,你会读到一种数据类型,你知道如何解释这些数据
答案 1 :(得分:0)
内存无法按照"字符"或者"整数",这些是假定抽象机器的高级概念。
通常,但不一定,字符只是一个较小的整数,通常是8位(但字符也可以是32位!),它代表一个符号或字母,而不是一个离散的数字。在某些情况下,甚至可以使用可变长度对字符进行编码。
存储器按照以字节(最小直接可寻址单元)或字组织的位进行操作。这些 - 你不知道 - 在银行组织。硬件通常允许在称为"缓存线"的单元中进行访问,但这是在您背后秘密发生的事情。
在汇编语言中,您通常可以访问这些字节和2的幂次数,有时具有特殊的对齐要求(通常还有位操作,但只有更改一位,他们仍然在整个字节/单词上工作。
然而,所有这一切都不是很有趣,而且对你来说也无关紧要。首先是编译器(或解释器)的工作,以确保当你说一个整数或一个字符时,无论你想要什么出现在另一端。如果可能的话,将工具转换为另一工具也是工具的责任,如果不可能则产生错误 您甚至不确定整数或字符的值是否具有内存位置(它可能很好地存储在寄存器中),除非您明确强制执行。
您无法区分来自"字符的某个内存位置的字节"来自属于"整数"的字节。他们看起来一样。
虽然可以在大多数语言中将一种类型的原始字节读取为另一种类型,但这通常不是您通常需要做的(或者应该这样做)。