在我正在阅读的书中,它说:
标准没有定义如何表示签名类型,但是指定范围应该在正值和负值之间平均分配。因此,保证8位有符号字符能够保存-127到127之间的值;大多数现代机器使用允许从-128到127的值的表示。
我认为[-128; 127]范围来自于称为"二进制补码"其中负数是!A + 1(例如0111是7,然后1001是-7)。但我无法理解为什么在一些旧的(?)机器中,值范围为[-127; 127]。任何人都可以澄清这个吗?
答案 0 :(得分:2)
一个补码和带符号幅度都是表示范围[-127,127]的8位数。两者都有+0和-0的不同表示。两者都被(大多数)早期计算机系统使用过。
签名的幅度表示可能是人类想象的最简单的表示,可能与人们首次创建十进制计算机而不是二进制计算机的原因相同。
我认为,之所以使用一个补码的唯一原因,是因为早期计算机的创造者尚未考虑过两个补码。然后,由于向后兼容性。虽然,这只是我的推测,所以不要带点盐。
更多信息:https://en.wikipedia.org/wiki/Signed_number_representations
作为一个稍微相关的事实:在IEEE浮点表示中,带符号的指数使用excess-K表示,小数部分用带符号的幅度表示。
答案 1 :(得分:1)
实际上不是-127到127.但-127到-0和0到127.
早期的处理器使用了两种方法:
有符号幅度:在这个中,通过将1置于最高有效位来形成否定答案。因此10000000和00000000都代表0
一个补充:只应用于正数。这导致两个零表示:11111111和00000000。
另外两个补充几乎和其他两个一样古老。 https://www.linuxvoice.com/edsac-dennis-wheeler-and-the-cambridge-connection/