C和C++标准对假设的三进制硬件体系结构的适应性如何?

dzjeubhm  于 2023-11-16  发布在  其他
关注(0)|答案(2)|浏览(113)

用C或C编写一个三进制计算机有多容易?
显然,标准逻辑运算符(如&|^)只有在使用二进制逻辑时才有意义。
对于整数值,C标准指的是取值范围,而C
标准提到的是位长度(例如,long必须至少为32位)。这如何适用于使用三进制(即三进制位)的计算机?
一般来说,在三元体系结构上使用稍微修改过的C/C进行编程是可行的,还是应该从头开始设计一种新的编程语言?
需要考虑的要点是向后兼容性(假设二进制的程序是否可以很容易地编译为三进制架构,或者是否需要模拟二进制数据存储?)和C/C
标准设计中隐含的假设。

nwsw7zdq

nwsw7zdq1#

C++标准的措辞假设了二进制架构:

[内存介绍]/1:

C++内存模型中的基本存储单元是字节,一个字节至少要足够大以包含基本执行字符集的任何成员和Unicode UTF-8编码形式的8位代码单元**,并且由一个连续的位序列**组成,其数量由实现定义。

[基本/基本]/4:

无符号整数应遵守算术模2 [的幂] n的法则,其中n是该特定大小的整数的值表示中的位数。
此外,* 比特字段 * 和 * 填充比特 * 是经常使用的概念。
像左移、右移这样的运算符也指的是位,按位与、按位或和按位异或根据定义是在位级别操作的运算,假设每个位是真或假。

如果标准适用于三进制架构会怎样?

我们可以想象,标准可以使用另一个术语来指定架构中最小的信息片段,其方式与 byte 类似(虽然字节通常为8位,但在标准中没有定义为字节,因此标准可以很好地与具有10位字节的机器一起工作)。
然而,后果将是可怕的:

  • 例如,左移在许多算法中被假设乘以2的幂,突然,它将乘以3的幂。右移也是如此。所以很多现有的代码将不再工作。
  • 按位操作并没有为三进制定义:它们只为二进制位定义。因此标准必须以某种方式重新定义它们(例如,通过某种2的幂数学模拟原始行为)。同样,它们有可能破坏某些现有代码,特别是如果与移位结合使用。

* 附加备注 *

自从1948年诺伯特·维纳(Norbert Wiener)的《控制论》(Cybernetics)一书出版以来,)毫无疑问,二进制系统的替代品已经不存在了。在“* 计算机器和神经系统 *”一章中,他很好地解释了为什么数字机器比模拟机器更准确,性能更好,而且在数字机器中,二进制运算优于其他运算,因为它更简单、更快,而且实现起来更容易、更便宜。2目前,没有人能够证明相反的情况,所以很快就看不到三进制计算机体系结构。

* 评论 *

  • Peter在评论中指出,实现只需要提供C++标准中定义的抽象机的指定行为,根据[intro.abstract]/5,这是正确的。但我的观点是,这只是从三进制机器的Angular 来看的理论真理。*
  • 二进制模型在标准的许多地方都是如此强烈的假设,并且与寻址方案交织在一起,我将假装不可能在三进制机器上以有效和一致的方式进行模拟。
  • 只是为了说明字节定义的问题:它需要6个trits来满足一个字节的要求。然而,6个trits对应于9,5位。为了使一个字节对应于标准所要求的连续位数,你需要它是s个trits,这样pow(3,s)== pow(2,n).这个方程没有解.或者你可以说,一个字节是9位存储到6个三进制数,你只是忽略一些三进制值.但由于字节是用来存储指针,你也会忽略一些内存范围。所以你需要一个Map函数来转换以字节和机器地址存储的值。但是硬件对齐约束呢?这些可能不对应于可以根据二元模型表达的比对,最后,你需要一个缓慢的虚拟机,它完全由软件模拟二进制架构(当然与x86架构上的许多MIPS仿真器具有相同的性能水平,因此可以用于教育目的)。我认为这可以符合标准,但不再是我们的性能期望。*
kmbjn2e3

kmbjn2e32#

看看GitHub上的Louis-Dr三进制Verilog。问题是C做了太多的假设,需要备份或重新定义才能更具体地使用语言。他将二进制定义为可以携带0或1(位)的基本信号,将三进制定义为可以携带-1,0,或+1(trit)。因此,一个字节将是二进制[8],而一个三元组(trit)将是三进制[3]。决定?将是a?b:c:d。运算符和移位将根据被移位的内容进行工作。trit明智的逻辑运算可以通过其名称的k-map来定义。这与编程类似www.example.com汇编语言的东西是一致3niti.org的。如果你用三元思维,这一切都开始有意义。数值是用于来回转换二进制或平衡三进制值的数字。我将使用稍微修改的表示法来表示从-13=G开始的三进制的七进制表示法,因此G H K M N P R T V W X Y Z 0 1 2 3 4 5 6 7 8 9 A B C D不踩(重新定义)任何十六进制或八进制,并与日落九进制(2三进制从属)定义一致。

相关问题