zoukankan      html  css  js  c++  java
  • 三进制数的对称表示法

    三进制数的对称表示法

    想出三进制数的对称表示法是从一道数学题开始的:

    “最少需要多少个砝码可以在一台天平上称出从1千克到40千克之间的任何整数千克的重量?”
           

    先推算出答案是只需要4个砝码,质量为1,3,9,27千克。然后就一直在想为什么这几个数字是3的n次方呢?后来终于想明白了:每个砝码有放左边、不放、放右边三种选项,相当于可以取1,0,-1三种数值,因此问题的本质就是这是一种三进制的计数法。如果只允许砝码在天平的一边放,就会对应为二进制的计数法。

    以前学过的三进制数是用0,1,2表示的,用1,0,-1也可以吗?推算一番就会发现果然可以,而且更好用。为了书写方便,用F表示-1,1在个位表示1,进位后10表示3,F在个位表示-1,所以1F就是2。以四位数的三进制数为例,与十进制数的对应关系如下:

    三进制数 十进制数 三进制数 十进制数
    0000 0    
    0001 1 000F -1
    001F 2 00F1 -2
    0010 3 00F0 -3
    0011 4 00FF -4
    01FF 5 0F11 -5
    01F0 6 0F10 -6
    01F1 7 0F1F -7
    010F 8 0F01 -8
    0100 9 0F00 -9
    0101 10 0F0F -10
    011F 11 0FF1 -11
    0110 12 0FF0 -12
    0111 13 0FFF -13
    1FFF 14 F111 -14
    1FF0 15 F110 -15
    1FF1 16 F11F -16
    1F0F 17 F101 -17
    1F00 18 F100 -18
    1F01 19 F10F -19
    1F1F 20 F1F1 -20
    1F10 21 F1F0 -21
    1F11 22 F1FF -22
    10FF 23 F011 -23
    10F0 24 F010 -24
    10F1 25 F01F -25
    100F 26 F001 -26
    1000 27 F000 -27
    1001 28 F00F -28
    101F 29 F0F1 -29
    1010 30 F0F0 -30
    1011 31 F0FF -31
    11FF 32 FF11 -32
    11F0 33 FF10 -33
    11F1 34 FF1F -34
    110F 35 FF01 -35
    1100 36 FF00 -36
    1101 37 FF0F -37
    111F 38 FFF1 -38
    1110 39 FFF0 -39
    1111 40 FFFF -40

    四位数的三进制数总共可以表示3^4=81个数字。我们看到正数和负数是用统一的规则表示的,而在二进制数中负数需要一种新的规则。三进制代码的一个特点是对称,即相反数的一致性,不存在“无符号数”的概念。本以为这是我独创的一种想法,网上一搜发现这种表示法早已有之,叫做对称三进数表示法。

    三进制数的小数位也是三进制的,以前面的天平为例,再加入1

    3
    ,1

    9
    ,1

    27
    千克这三个砝码,就可以把测量精度提高到1

    27
    千克。

    下面看一下对称三进数的计算规则:

    加法

    0+0 = 0 0+1 = 1 0+F = F
    1+0 = 1 1+1 = 1F 1+F = 0
    F+0 = F F+1 = 0 F+F = F1

    减法

    0-0 = 0 0-1 = -1 = F 0-F = -F = 1
    1-0 = 1 1-1 = 0 1-F = 1F
    F-0 = F F-1 = F1 F-F = 0

    乘法

    0×0 = 0 0×1 = 0 0×F = 0
    1×0 = 0 1×1 = 1 1×F = F
    F×0 = 0 F×1 = F F×F = 1

    除法

    0÷1 = 0 0÷F = 0
    1÷1 = 1 1÷F = F
    F÷1 = F F÷F = 1

    运算规则就是0,1,-1之间的运算,非常简单。根据这个可以设计一个三进制的算盘,上面一排表示+1,下面一排表示-1,珠算口诀也比十进制的算盘简单很多。

    用正电压、零电压、负电压分别表示1、0、-1,有可能造出三进制的电子计算机。事实上,前苏联莫斯科国立大学在1956年至1965年设计和制造了三进制计算机“Сетунь”,1970年又推出了“Сетунь 70”,定义了三进制字节——“tryte”,每个三进制字节由6个三进制位组成(取值范围是-364到+364),指令集符合三进制逻辑,算术指令允许操作数长为1、2和3字节(三进制),结果长度也扩展到6字节。据说三进制计算机的架构简单、稳定、经济,三进制逻辑电路比二进制逻辑电路速度更快。高德纳预测未来的光计算机和量子计算机会再次使用三进制计数法,用没有光线表示0,用纵向和横向的线偏光表示1和-1。

    Setun ternary computer.

    在三进制逻辑学中,符号“1”代表“真”;符号“-1”代表“假”;符号“0”代表“不知道”。在一般情况下,我们对问题的看法不是只有“真”和“假”两种答案,还有一种“不知道”,因此三进制逻辑更接近人类大脑的思维方式。显然,这种逻辑表达方式更加适合应用于人工智能。根据哥德尔不完备定理,在相容的公理系统中存在既不能证明也不能否证的命题,也就是说这种类型的命题的逻辑值的确就是不知道。三值逻辑符合更普遍的情况。

    对称三进制的逻辑运算规则如下:

    0∨0 = 0 0∨1 = 1 0∨F = 0
    1∨0 = 1 1∨1 = 1 1∨F = 1
    F∨0 = 0 F∨1 = 1 F∨F = F

    0∧0 = 0 0∧1 = 0 0∧F = F
    1∧0 = 0 1∧1 = 1 1∧F = F
    F∧0 = F F∧1 = F F∧F = F

    ¬0 = 0 ¬1 = F ¬F = 1

    SQL使用 NULL 来表示在数据库中缺失数据,SQL语句中的逻辑表达式就是三值逻辑,通常TRUE值作为一种情况处理,FALSE和NULL作为另一种情况处理。

  • 相关阅读:
    abstract修饰方法总结
    linux tar.gz zip 解压缩 压缩命令
    html5视频播放
    Response.Redirect 打开新窗体的两种方法
    Gmail POP3设置
    加壳学习笔记(二)-汇编基础
    C#-异常处理:tyr,catch,finally ---ShinePans
    cocos2d jsb 打包 Android APK
    编写你自己的单点登录(SSO)服务
    一分钟制作U盘版BT3
  • 原文地址:https://www.cnblogs.com/rufi/p/2154552.html
Copyright © 2011-2022 走看看