📜  负数如何存储在内存中?

📅  最后修改于: 2021-09-16 10:36:53             🧑  作者: Mango

先决条件 – 基数转换、二进制数的 1 和 2 的补码、二进制字符串的2 的补码
假设下面的代码片段, int a = -34;现在这将如何存储在内存中。所以这里是完整的理论。每当遇到带减号的数字时,该数字(忽略减号)将转换为其等效的二进制数。然后计算数字的二进制补码。该二进制补码保存在内存中分配的位置,符号位将设置为 1,因为保存的二进制数为负数。每当首先访问该值时,将检查符号位,如果符号位为 1,则二进制将进行二进制补码并转换为等效的十进制数,并用减号表示。

让我们举个例子:
例子 –
int a = -2056;
将计算 2056 的二进制,即:

00000000000000000000100000001000(32位表示,根据C中int的存储)
上述二进制的 2 的补码是:
11111111111111111111011111111000。

所以最后上面的二进制文件将存储在为变量 a 分配的内存中。
当访问变量 a 的值时,将从内存位置检索上述二进制文件,然后检查其最左边位的符号位为 1,因此二进制数为负数,因此它将是 2 的补码,当它是 2 的补码时,将得到 2056 的二进制数,即:
00000000000000000000100000001000

上面的二进制数将被转换为它的十进制等价物 2056,并且由于符号位为 1,因此从二进制数中获得的十进制数将用负号表示。在我们的例子中 -2056。