C 有非补码实现吗?

问题描述 投票:0回答:3

众所周知,ISO C 标准(我认为还有 C++,尽管我对 C 方面更感兴趣)允许有符号数字的三种基本表示形式:

    二进制补码;
  • 一个的补码;和
  • 符号/大小。
维基百科的条目指出,从 60 年代起,IBM 7090 使用了符号/量值,PDP-1、CDC 160A 和 UNIVAC 1100 使用了该补码,所有这些都可以追溯到 60 年代。

是否有任何其他具有这些替代表示形式的 C(或底层硬件)实现,这些实现是在五十年前才出现的(它们是什么)?

将某些东西保留在不再存在的机器标准中似乎有点浪费。

c language-lawyer iso negative-number representation
3个回答
41
投票
我能找到的最新示例是

UNISYS 2200系列,基于UNIVAC,具有补码运算。各种型号于 1986 年至 1997 年间生产,但操作系统直到 2015 年仍在积极开发中。他们还有一个 C 编译器,如here所示。 它们今天可能仍在使用。

我没有任何确凿的证据证明它们不存在,但我从未见过。据我所知,早在 C 标准化之前,所有非补码硬件就已经过时了。

6
投票
收集证据的最佳方法可能是寻找与非补码系统相关的标准中的冲突要求和其他彻底的错误。如果从未创建过这样的实现,那么规范中可能存在疏忽,当有人真正尝试创建这样的实现时,这些疏忽就会变得明显。

这已通过 C23 引用进行了更改

0
投票

但是,所有流行的数据模型(包括所有 ILP32、LP32、LP64、 LLP64) 和几乎所有 C 编译器都使用二进制补码表示 (唯一已知的例外是 UNISYS 的一些编译器),并且截至 C23,它是标准允许的唯一表示形式, 保证范围从 2^N-1 到 2^N (例如,对于有符号的 -128 到 127 8 位类型)。

© www.soinside.com 2019 - 2024. All rights reserved.