1

我在一本计算机科学书籍中学习整数数据格式,据我所知,整数的二进制表示,无论是正数还是负数,最左边的位(msb)要么是正数的 0,要么是负数的 1,让我们说在一台 8 位计算机中,我怎么知道它是在谈论 10000010 - 130 以 10 为底还是指的是负 2?我可能是错的,如果我是请纠正我。

4

2 回答 2

3

如果你只是在10000010某处看到字符串,我不知道......写在墙上或其他东西上,你怎么知道如何解释它?

你可能会说,嘿,那是一千万和十(你认为它是基数 10)或者你可能会说嘿,那是 -126(你认为它是二进制补码),或者你可能会说这是正数 130(你认为它是标准二进制)。

从理论上讲,它取决于正在解释它如何被解释的任何东西。

因此,当计算机保存 8 位数据时,它取决于它如何解释它。

现在,如果您正在编程,您可以告诉计算机您希望如何解释某些内容。例如,在 C++

// char is 1 byte
unsigned char x = 130u;

在这里,我告诉编译器将 130无符号数放入一个字节中,因此计算机将存储10000010并将其解释为值 130

现在考虑

// char is 1 byte
char x = -126;

在这里,我告诉编译器将 -126符号放入一个字节中,因此计算机将再次存储10000010,但这次它将解释为值 -126。

于 2013-07-08T21:44:48.650 回答
2

看看这个问题的答案:负数在内存中存储为 2 的补码,CPU 如何知道它是负数还是正数?

CPU 使用称为操作码的东西来确定在操作内存位置时将采用哪个函数(在本例中为值 10000010)。正是 CPU 中的函数将其作为负数或正数进行操作。CPU 无权访问该数字是有符号还是无符号 - 它在操作该数字时使用操作码来确定它应该是有符号还是无符号操作。

于 2013-07-08T21:40:29.617 回答