【发布时间】:2013-07-06 08:34:15
【问题描述】:
我在一本计算机科学书籍中学习整数数据格式,据我所知,整数的二进制表示,无论是正数还是负数,都是让最左边的位 (msb) 为 0 表示正数或 1对于负数,假设在 8 位计算机中,我怎么知道它是在谈论 10000010 - 130 以 10 为底还是指负数 2? 可能有误,请指正。
【问题讨论】:
我在一本计算机科学书籍中学习整数数据格式,据我所知,整数的二进制表示,无论是正数还是负数,都是让最左边的位 (msb) 为 0 表示正数或 1对于负数,假设在 8 位计算机中,我怎么知道它是在谈论 10000010 - 130 以 10 为底还是指负数 2? 可能有误,请指正。
【问题讨论】:
如果你只是在某处看到字符串10000010,我不知道……写在墙上什么的,你怎么知道如何解释它?
你可能会说,嘿,那是一千万和十(你认为它是以 10 为底)或者你可能会说嘿,那是 -126(你认为它是二进制补码),或者你可能会说这是正 130(你认为它是标准二进制文件)。
从理论上讲,它取决于正在解释它如何被解释的任何东西。
因此,当计算机保存 8 位数据时,它取决于它如何解释它。
现在,如果您正在编程,您可以告诉计算机您希望如何解释某些内容。比如在c++中
// char is 1 byte
unsigned char x = 130u;
这里我已经告诉编译器将 130 unsigned 放入一个字节中,因此计算机将存储 10000010 并将其解释为值 130
现在考虑
// char is 1 byte
char x = -126;
这里我告诉编译器将 -126 signed 放入一个字节,因此计算机将再次存储 10000010 但这次它会将其解释为值 -126。
【讨论】:
CPU 使用称为操作码的东西来确定在操作内存位置(在本例中为值 10000010)时将使用哪个函数。正是 CPU 中的函数将其作为负数或正数进行操作。 CPU 无法访问该数字是有符号还是无符号 - 它在操作该数字时使用操作码来确定它应该是有符号还是无符号操作。
【讨论】: