【周末闲谈】二进制VS三进制

简介: 【周末闲谈】二进制VS三进制

前言


💻作为计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展,了解电脑原理的人就知道,现代的计算机和依赖计算机的设备里都使用二进制,但我们有没有思考过为什么?🤨今天就让我们来谈谈为什么电脑使用的是二进制吧🚗🚗🚗


一、效率?ㄟ( ▔, ▔ )ㄏ


我们使用二进制是因为它的效率最高吗?

很遗憾,事实上很早就有人否定了这个观点。

让我们拿100⁹⁹与99¹⁰⁰来举个例子吧,

如果我们要想知道它们那个更大,通常我们们使用十进制就可以得到:


9bcc1541147383168f68ccbfa404c732_37e2267dd380456ab501c9c356373341.png


你会发现:无论是99个100,还是100个99,加起来都是9900。

所以这个问题变成了:如果你把9900拆成几个数的和,然后把它们乘起来,什么时候乘积最大?

当我们把9900拆成一大堆正整数的和,让它们的乘积最大,我们不难发现拆成3300个3时,它们的乘积最大,这是巧合吗?🤷‍♂️🤷‍♂️🤷‍♂️


试想想:大家一定玩过算珠吧,如果给你100个珠子,你最多能表示出多少个数呢?

如果算珠使用的是10进制,那每一位的柱子上需要有10个珠子,100个珠子可以串满10根柱子,也就是能表示出十位数,总共能表示1010个数;

如果用5进制,即每一根柱子上需要串5个珠子,一共能串满20位,也就是能表示520个数

以此类推,我们列出一个表格:


80b43664e24a449df16e435145dbf1ae_6a468914806246958ab4135f0b938e72.png



我们不难发现:同样用100个珠子,使用3进制——每根柱子上串3个珠子,表示33位,效率是最高的,它能表示出最多的数字!

我们还可以把进制x作为横坐标,把100个珠子在这种进位制下能表示的数作为纵坐标,画出一幅图,你会发现,在进位制是e=2.71828…时表示的数最多!这个数就是自然常数e!它是一个和圆周率π一样神奇的无理数


为了表示 M 个数,在 x 进制下,需要 x*logx^M 个珠子

所以效率就可以表示成这样一个公式:


8c58c8e035070bbd86e5047f1936de50_b49b79f84a7a48cfa0f3ceb71464aec6.png


那么它何时取最大值呢?我们求导看看:f`( x ) = MlnM ( 1-lnx ),显然当我们x=e时有最大值。


1684813383364.png


所以效率最高而选择它的解释是行不通的


二、三进制计算机?(+_+)?


五十年之前我们的老大哥苏联就发现了三进制在计算机上的优势。


1958 年,莫斯科国立大学的计算机研究中心研制出了世界上第一台三进制电子计算机 —— Сетунь( setun )。Сетунь 计算机用的不是一般那种逢三进一的三进制,而是平衡三进制,也叫对称三进制。


也许有的同学就要问了什么是平衡三进制🧐🧐🧐?


所谓的平衡三进制就是由 -1、0、1 构成的,对应的逻辑电路就是负电压、零电压和正电压。


平衡三进制是一种很巧妙的设计,它所记录的数字可以表达出全部整数。而且由于 -1 的引入,对负数就不必使用额外的负号了,而二进制是无符号数,不能直接表示负数。


不过从没有人看好这台机器,他们觉得这个经济计划之外的玩意儿就是个科幻产物。

当国内外的订单却像雪花般飞来,10 到 15 台的年产量远远不够应付市场需求。当时的苏联工业部却并没有随着订单数量的增加而增加产量,相反,他们严重限制了生产进度,拒绝订单,并在 1965 年完全停产。也许听起来不可思议,其实原因并不复杂,Сетунь 的电子元件良品率极高,而且非常耐造,同时价格还很低,它的售价只有 27.5 万卢布,创造了当时的最低记录,而同期的计算机售价基本都在它的两倍以上。

那台在莫大计算中心的样机整整运行了 17 年,除了在第一年更换了三个有缺陷的元器件之外,内部设备从来没维修过,直到它被摧毁前的一刻都还能正常使用。

而苏联官僚停产了 Сетунь 之后,取而代之的是一种相同性能的二进制计算机,但价格却贵出 2.5 倍。


说白了,Сетунь 的生产让苏联官僚少了大笔的财政拨款,三进制计算机就 “ 理所应当 ” 的成为了当时的政治牺牲品。


三进制计算机的最后(┬┬﹏┬┬)


Сетунь 最终只生产了五十台,我们可以从加里宁格勒到雅库茨克,从阿什哈巴德到新西伯利亚,全苏都能看到它的身影,证明它曾经存在过。各地都对 Сетунь 的评价很高,大家认为它编程简单,很适合用于工程计算、工业控制、计算机教学等等。Сетунь 的成功经验让莫大决定不放弃这台计算机,于是他们顶住压力在 1970 年推出了 Сетунь 70 型计算机,而且还对应着二进制的 byte 创建了三进制字节 tryte。每个 tryte 由 6 个 trit 构成,约等于 9.5 个二进制的 bit。但这个项目长期得不到上级的支持,最后也不得不无限期停滞。Сетунь 70 就此成了莫斯科大学的绝唱。再后来苏联解体,三进制计算机也跟着苏维埃混入了历史的尘埃,直到今天也没有其他国家能够复现它。


总结


在《计算机应用基础》一文中写到:“理论上e进制是最优的进制,考虑到取整数,三进制是实际可用的最优进制,但是考虑到尽可能简化硬件电子器件的设计与制造,现代电子计算机系统的设计普遍基于二进制”。也需在未来的某一天,我们可以重新看到三进制计算机重新出现在我们的生活中。

目录
相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
168819 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
人工智能 Java 程序员
一文彻底搞清楚C语言的循环语句
本文介绍了C语言中的三种循环语句:`while`、`do-while`和`for`,并详细解释了它们的语法格式、执行流程及应用场景。此外,还讲解了循环控制语句`break`和`continue`的使用方法。希望这些内容能帮助你在编程道路上不断进步,共同成长!
1376 0
一文彻底搞清楚C语言的循环语句
|
11月前
|
消息中间件 存储 缓存
RocketMQ原理—4.消息读写的性能优化
本文详细解析了RocketMQ消息队列的核心原理与性能优化机制,涵盖Producer消息分发、Broker高并发写入、Consumer拉取消息流程等内容。重点探讨了基于队列的消息分发、Hash有序分发、CommitLog内存写入优化、ConsumeQueue物理存储设计等关键技术点。同时分析了数据丢失场景及解决方案,如同步刷盘与JVM OffHeap缓存分离策略,并总结了写入与读取流程的性能优化方法,为理解和优化分布式消息系统提供了全面指导。
RocketMQ原理—4.消息读写的性能优化
|
11月前
|
存储 人工智能 运维
自我提升可以从哪些方面:AI时代的能力重构与终身进化
在数字技术与AI快速发展的背景下,自我提升从“阶段式学习”转变为“持续性进化”。文章从认知升级、技能进化、生态构建三个维度解析AI时代个人能力提升的核心路径。强调个体需从知识积累转向能力重构,通过批判性思维、跨域关联和动态适应性实现思维跃迁;同时构建复合能力体系,并借助AI工具与协作网络,在数字化转型中扮演价值创造者角色。最终,自我提升将超越传统框架,成为能力生态的动态演进过程。
|
人工智能 前端开发 API
人人都是应用开发者:AI时代的全栈产品经理实践
本文试图最短路径、最轻模式来做一个应用,实现一个需求!仅需三大步+9小步,以下为手把手教学流程。
784 10
|
人工智能 IDE API
在我的开源项目(AI Godot 桌宠)中使用通义灵码
作为一名AI代码助手的忠实用户,我近期尝试了阿里开源的Qwen模型。通过在个人项目——一个由Godot引擎开发的AI桌宠软件中测试Qwen,我发现其在处理小众语言(如GDScript)时表现出色,能够快速准确地解决问题,甚至优化了我的代码。此外,Qwen在GitHub Actions自动化打包等复杂任务上的表现同样令人满意。其高效的代码补全速度更是超越了付费的GitHub Copilot。这次体验让我对开源AI工具刮目相看,强烈推荐大家试用。
|
机器学习/深度学习 人工智能 算法
【AI系统】关键设计指标
本文介绍了AI芯片设计中的关键指标与设计点,涵盖OPS、MACs、FLOPs等计算单位,以及精度、吞吐量、时延、能耗、成本和易用性等六大关键指标。文章还探讨了MACs和PE优化策略,以及通过算术强度和Roofline模型评估AI模型在特定芯片上的性能表现,为AI芯片的性能优化提供了理论依据和实践指导。
1482 1
|
存储 网络协议 大数据
一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)
该文档详细介绍了RDMA(远程直接内存访问)技术的基本原理、主要特点及其编程接口。RDMA通过硬件直接在应用程序间搬移数据,绕过操作系统协议栈,显著提升网络通信效率,尤其适用于高性能计算和大数据处理等场景。文档还提供了RDMA编程接口的概述及示例代码,帮助开发者更好地理解和应用这一技术。
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
1040 6
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

热门文章

最新文章