关于三进制

在写代码的时候,用到位运算,其中网上有人解法中的二进制模拟三进制的字眼吸引住了我。

百度之,在茫茫网页中发现了知乎中关于”三进制优于二进制的讨论“,好奇的点进去一看,还挺有道理的,确切的说应该是对称三进制(-1,0,1)强于二进制

据说,苏联有科学家试着用三进制发明计算机呢,不知后事如何,可百度之,或谷歌之

摘录如下:

  • 三进制有两种:普通三进制对称三进制;而对于计算机而言,普通三进制意义绝对没有现行的二进制意义更大,就其本质,三进制都是以三为底数的进位制,这与二进制类似;但是对称三进制就不同了,它极大的扩充了计算机的逻辑能力,以及对整数的表达能力(后面会说到原因)。
  • 普通三进制:以1,2,0来表示数字,比如:十进制数365_(10)表达成三进制就是111112_(3),但是要表达-365,我们会发现,依然如同二进制一样,缺少对符号的表达。
  • 对称三进制:以-1,0,1来表示数字,习惯上-1用F来替代,这样表达365_(10),就是1FFFFFF;而-365_(10),就是F111111,对称三进制对于负整数的表达是无需符号位的。
  • 我们知道,人类正常的思维,是不可能仅靠“真假”两种逻辑来判断的,很多时候我们还有一种模棱两可的思维判断,或者说,就是介于真假之间的判断。就比如,有人问:你是否喜欢某个城市,你可以回答,喜欢/不喜欢/就这样吧,这样三种回答,其中的“就这样吧”的回答,就是一种不确定,或者说未知的状态,而让只有真假态度的二进制计算机,就很难明确这个逻辑到底是什么了。但是对称三进制就没有这个问题了,F是不喜欢,1是喜欢,0就可以表示不明确这个含义了。
综上所述,三进制计算机比较强大就在于可以更接近人类的思维,可以简洁的表达所有整数

### 三进制的概念及其在计算机科学中的应用 三进制是一种基于基数为3的数位系统,在该系统中,每一位上的可能取值范围是从0到2。与二进制相比,三进制可以更高效地表达某些特定的数据结构和计算逻辑[^1]。 #### 三进制转十进制算法 要将一个三进制数转换成十进制数,可以通过加权求和的方式完成。假设有一个三进制数 `abc`(其中a, b, c分别代表各个位置上的数字),其对应的十进制值可通过如下公式计算得出: \[ DecimalValue = a \times 3^2 + b \times 3^1 + c \times 3^0 \] 以下是使用 Python 编写的三进制转十进制函数示例代码: ```python def ternary_to_decimal(ternary_str): decimal_value = 0 power = 0 for digit in reversed(ternary_str): if not (digit.isdigit() and int(digit) < 3): raise ValueError("Invalid character found; only digits '0', '1' or '2' are allowed.") decimal_value += int(digit) * (3 ** power) power += 1 return decimal_value ``` 此函数接受字符串形式输入的三进制数值并返回相应的十进制整数值[^2]。 #### 十进制转三进制算法 对于从十进制向三进制转化的过程,则需反复除以3直到商变为零为止,并记录每次运算所得余数作为目标三进制数各位上的值。下面展示了一个简单的实现方法: ```python def decimal_to_ternary(decimal_number): if decimal_number == 0: return "0" ternary_digits = [] is_negative = False if decimal_number < 0: is_negative = True decimal_number *= -1 while decimal_number > 0: remainder = decimal_number % 3 ternary_digits.append(str(remainder)) decimal_number //= 3 if is_negative: ternary_digits.append('-') ternary_digits.reverse() return ''.join(ternary_digits) ``` 上述代码片段实现了由任意非负十进制整数至对应三进制表示之间的映射关系构建过程。 ### 结论 通过以上讨论可以看出,无论是哪种方向上的进制间相互转变操作都可以借助于基本数学原理配合程序设计技巧轻松达成自动化处理目的;这对于提升软件开发效率以及增强对底层硬件工作模式的理解均具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值