我正在学习 C/C++,所以对于某些人来说这可能是一个基本问题,但它让我感到困惑。
这里给出了漂亮的答案,涉及我们如何解释正数和负数以及程序执行时它们在内存(RAM 内存)中的样子。
我现在想的是负数如何存储在编译后的exec二进制文件中;也就是说,当程序未执行时(不在 RAM 内存中)。也就是说,编译后的负数是如何存储在硬件硬盘上的(所以当程序不执行时)。
编译器会在看到负数时,例如int number = -25
,首先将其转换为2的补码(
1110 0111
),然后将其存储在exec二进制文件(硬盘)中,还是仅将其存储为25最高位设置为1(
1001 1001
),然后当程序开始执行时,当它看到最高位为1时,首先将其转换为2的补码(
1110 0111
),然后将其加载到 RAM(分配内存,等等)并开始执行?
编译器采用两种常见方法: