0

谁能告诉我什么是 C++ 中的 int 数据类型,钻探我能找到的标题

typedef int                 INT;

文本代码中的类型与 RAM 中的物理存储之间的联系是什么/在哪里?编译器必须知道这个 int 是什么。我问 - 它在哪里向编译器解释?

4

5 回答 5

4

typedef int INT没有定义int。恰恰相反:它定义INT为 like intint它本身是在编译器的内部定义的,而不是在源文件中。

typedef 根本不映射到内存。它只是描述存储类型、大小等的文本。它是映射到内存的那种类型的变量。

于 2012-04-18T19:42:21.137 回答
2

Anint是一个整数。在最基本的层面上,它只是一组解释为数值的字节。现代处理器(和操作系统)支持多种大小的整数,但最常见的是 32 位和 64 位(分别为 4 和 8 字节)。

就硬件表示而言,它们只是设置为高电压和低电压的数据线。32 位并行数据总线将有 32 条数据线,每条数据线代表一位。如果要表示数字 100,请将其转换为二进制表示(即1100100),因此将第 3、6 和 7 行设置为高,其余设置为低。处理器和其他微控制器可以根据它们的内部功能和编程来解释这个信号。

于 2012-04-18T19:41:20.777 回答
2

int在 c++ 标准§3.9.1 基本类型中进行了描述。实际大小取决于实现。关于基本类型的大小,C++ 参考了 C99。请参阅<climits>标头,其中定义了 和 等值,MIN_INT以及标头MAX_INT中可用的功能<limits>,尤其是std::numeric_limits. 这提供了确定平台上不同类型范围的功能,请参阅此处了解更多详细信息。

您提到的 typedef 只是意味着您可以使用符号INT来表示int.

于 2012-04-18T19:43:47.477 回答
1

int因为是原始的 C/C++ 类型,所以你不能再深入了。

文本代码中的类型与 RAM 中的物理存储之间的联系是什么/在哪里?它不能结束,因为当你告诉他 int i= 时编译器应该做什么。他必须知道这个int是什么。

对于 Windows 情况(我没有使用其他操作系统的经验),编译器将您的代码构建成可执行文件,其中有两个主要部分:数据扇区和代码扇区。假设您声明int i,当您的代码被编译时,它将转换为内存位置(例如:0x0000004)。当操作系统加载您的可执行文件(在 Windows 中为 .exe 或 .dll)时,操作系统将为您的应用程序创建一个虚拟内存。(例如 0x100000000)。因此,您int i将位于物理内存中的 0x100000004 处,但位于应用程序虚拟内存中的 0x0000004 处。

上面的解释是事情如何工作的简化版本(实际事情可能更复杂)

于 2012-04-18T19:52:33.457 回答
1

C++ 不是纯粹面向对象的,尽管在 C++ 术语中每个定义的变量都称为“对象”。有些类型不是类的实例,int而是其中之一。

Anint只是一组至少 16 个连续位,它们被解释为有符号整数。实际大小以及某个位模式如何映射到整数主要取决于编译器和平台。

于 2012-04-18T20:20:31.673 回答