c++中的有符号类型表示

Signed type representation in c++

本文关键字:类型 表示 符号 c++      更新时间:2023-10-16

在我读的书中说:

该标准没有定义有符号类型的表示方式,但指定了应在正值和负值之间平均划分的范围。因此,8位有符号字符保证能够保持-127到127之间的值;大多数现代机器使用允许-128到127之间的值的表示。

我假设[-128;127]范围来自一个叫做"twos补码"的方法,其中负数是!A+1(例如0111是7,然后1001是-7)。但我无法理解为什么在一些旧的(?)机器中,值在[-127;127]范围内。有人能澄清一下吗?

补码和有符号幅度都是用8位数字提供范围[-127127127]的表示。两者对+0和-0都有不同的表示形式。两者都被(大部分)早期的计算机系统所使用。

符号星等表示可能是人类想象中最简单的,使用它的原因可能与人们最初创建十进制计算机而不是二进制计算机的原因相同。

我可以想象,之所以使用一的补码,是因为早期计算机的创造者还没有考虑到二的补码。后来,由于向后兼容性。不过,这只是我的猜测,所以请对此持怀疑态度。

进一步信息:https://en.wikipedia.org/wiki/Signed_number_representations

作为一个稍微相关的事实:在IEEE浮点表示中,有符号指数使用excess-K表示,小数部分由有符号幅度表示。

实际上并不是-127到127。但是-127对-0和0对127。

早期的处理器使用了两种方法:

  1. 符号幅度:在这种情况下,通过将1放在最高有效位来形成否定答案。因此10000000和00000000都表示0

  2. 补码:只是不适用于正数。这导致两个零表示:11111111和00000000。

此外,two的补码几乎和其他两个一样古老。https://www.linuxvoice.com/edsac-dennis-wheeler-and-the-cambridge-connection/