龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 1625|回复: 0

直接进行十六进制运算的芯片是可能的

  [复制链接]
发表于 2016-1-19 13:54:25 | 显示全部楼层 |阅读模式
一种基于新序列的十六进制运算方法,包括:
        采用新序列,以00,01,10,11,0#,0I,1#,1I,#0,#1,I0,I1,##,#I,I#,II十六个代码组成,每个代码以两个符号为一组,接下来再组合一组即:01 00,01 01,01 10,01 11,01 0#,01 0I,01 1#,01 1I, 01 #0,01 #1,01 I0,01 I1,01 ##,01 #I,01 I#,01 II,(0100—01II等同于传统十六进制数10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F)接下来是10 00,10 01,10 10,10 11,10 0#,10 0I,10 1#,10 1I,10 #0,10 #1,10 I0,10 I1,10 ##,10 #I,10 I#,10 II,11 00,11 01,11 10,11 11,11 0#,11 0I,11 1#,11 1I,11 #0,11 #1,11 I0,11 I1,11 ##,11 #I,11 I#,11 II,0# 00,0# 01, 0# 10, 0# 11, 0# 0#,0# 0I, 0# 1#,0# 1I, 0# #0, 0# #1, 0# I0, 0# I1, 0# ##,0# #I, 0# I#,0# II,0I 00—0I II,1# 00—1# II,1I 00 —1I II,#0 00——II II,再组合一组01 00 00,01 00 01, 01 00 10等等,一直排列下去,随着位数的增加表示数的范围也越大,新序列用两个符号组合等同于传统十六进制的一位,它组成一种机制,具有逢十六进一的特点,可以像传统十六进制一样具有连贯性即00 + 1 = 01,01 + 1 =10,10 +1 = 11,11 + 1 = 0#,0# + 1 = 0I,0I + 1 = 1#,1# + 1 = 1I,1I + 1 = #0,#0 + 1 = #1,#1 + 1 = I0,I0 + 1 = I1,I1 + 1 = ##,## + 1 = #I,#I + 1 = I#,I# + 1 = II,II + 1 = 01 00……如此下去,当然0,1,#,I这四个符号也可以用0,1,X,Y来代替。本发明采用0,1,#,I是有一定的含义的,它继承了传统二进制的原理,同时#与0形状相近,I与1形状相近,这使得新序列更便于记忆和理解;
        采用一种运算规则,从最后一位开始往左数分别记为个位,十位,百位,千位,万位,十万位等,个位与十位是一组,百位与千位是一组,万位与十万位是一组等等,运算规则是:0 + 0 = 0,0 + 1 =1, 当1 + 1 在个位上时1 + 1 = 0进位是1进向十位,当1 + 1 发生在十位上时 1 + 1 = 0进位是# 进位迂回至个位重新与个位上的结果相加, 1 + # = I,当1 + I发生在个位上时,1 + I = #进位是1,当1 + I发生在十位上时1+ I = #进位是#进向个位重新与个位上的结果相加,当# + #发生在个位上时# + # = 0进位#,当# + #发生在十位上时# + # = 0进位为1进向百位,当# + I发生在个位上时# + I = 1进位为#,当# + I发生在十位上时# + I = 1进位为1进向百位,当I + I发生在个位上时I + I = 0进位为I,当I + I发生在十位上时I + I = 0进位为1 + #此时进位1进向百位,进位#进向个位重新与个位上的结果相加,将上述进位规则排列整齐如下:
           A     B           S = A·(非B)+(非A)·B   C1=AB(个位上)    C2=AB(十位上)
0     0     0                           0                0
0     1     1                           0                0
1     0     1                           0                0
1     1     0                           1                #
0     #     #                           0                0
0     I     I                           0                0
1     #     I                           0                0
1     I     #                           1                #
#     0     #                           0                0
#     1     I                           0                0
I     0     I                           0                0
I     1     #                           1                #
#     #     0                           #                1
#     I     1                           #                1
I     #     1                           #                1
I     I     0                           I                1 + #
        要实现加法运算必须有一套与之相对应的新的基本的逻辑代数运算规则:
        非0 = I    非1 = #           非# = 1     非I = 0
        A + 0 = A                     A·I = A
        A·0 = 0                      A + I = I
        A + (非A) = I                 A·(非A) = 0
        A·A = A                      AB = BA
        A + B = B + A                 A(B + C) = AB + AC
        A + BC = (A + B)(A + C)       A + AB = A
        A + (非A)B = A + B            A ·(A + B) = A
        非(非A ) = A
        下面推导A + BC = (A + B)(A + C)
        (A + B)(A + C) = A·A + AC + AB + BC
                   =A + AC + AB + BC
                   =A·I + AC + AB +BC
                   =A(I + C + B) + BC
                                   =A·I + BC
                                   =A + BC
        现说明新序列下两个二位数相加:
        A1A0 + B1B0 的运算过程,个位上A0 + B0 = C0进位记为C01,十位上A1 + B1 + C01 = C1进位记为C10根据运算规则C10可能进向个位或进向百位,也可能既进向个位也进向百位;
        如果C10进向个位则C0 + C10 =X0即为结果的个位,进位记为C11,C1 + C11 = X1即为结果的十位,进位记为C12,这时C12的值是0或者1,它进向百位,A1A0 + B1B0 = 0C12 X1X0;
        如果C10进向百位时,C10为1,则A1A0 + B1B0 = 01 C1C0;
        如果C10既进向个位也进向百位即C10 = 1 + #,此时1进向百位,#进向个位,C0 + # = X0即为结果的个位,进位记为C11,C1 + C11 = X1即为结果的十位,A1A0 + B1B0 = 01 X1X0;
        两个二位数相加的结果不会超过01 I#,它是II + II的结果;
        更多位数的新序列数相加就是重复两个二位数相加的过程,但是要考虑从低位来的进位。




A与B     F1          A 或B      F2
0   0      0          0    0      0
0   1      0          0    1      1
1   0      0          1    0      1
1   1      1          1    1      1
0   #      0          0    #      #
0   I      0          0    I      I
1   #      0          1    #      I
1   I      1          1    I      I
#   0      0          #    0      #
#   1      0          #    1      I
I   0      0          I    0      I
I   1      1          I    1      I
#   #      #          #    #      #
#   I      #          #    I      I
I   #      #          I    #      I
I   I      I          I    I      I
   
这里描一下四个信号0,1,#,I。 我这里讲的是电磁继电器的实验,JRC-21F(4100)3V DC,电阻,二极管,三级管,LM339,74LS139等器件,参与运算的基本单元是这四个信号中的两个,先用比较器比较判断信号的范围,分类,送入四个运算单元,每个运算单元都是能进行四种信号运算的小模块,实际参与运算的模块由保护电路,分析电路组成。它们组成了与门,或门,非门,与非,或非等器件。
最后附上一段伪程序,大致讲解这种运算:
PYTHON 字典:
d = {'00':0x0,'01':0x1,'10':0x2,'11':0x3,'0#':0x4,'0I':0x5,'1#':0x6,
          '1I':0x7,'#0':0x8,'#1':0x9,'I0':0xa,'I1':0xb,'##':0xc,'#I':0xd,
          'I#':0xe,'II':0xf}
print(d)


print(d['II'])
print(d['#I'])
print(d['I#'])
print(d['11'])
print(d['0#'])
print(d['I1'])
print(d['##'])

print(hex(d['##']))
a = d['##'] + d['##']
print(hex(a))
print(a)
d2 = {'0' : '00','1' : '01','2':'10','3':'11','4':'0#','5':'0I','6':'1#',
      '7':'1I','8':'#0','9':'#1','10':'I0','11':'I1','12':'##','13':'#I',
      '14':'I#','15':'II','16':'01 00','17':'01 01','18':'01 10','19':'01 11',
      '20':'01 0#','21':'01 0I','22':'01 1#','23':'01 1I','24':'01 #0',
      '25':'01 #1','26':'01 I0','27':'01 I1','28':'01 ##','29':'01 #I',
      '30':'01 I#','31':'01 II'}
b = d['0#'] + d['0#']
print(d2[str(b)])
print(d2[str(a)])
print(d2[str(d['II'] + d['II'])])

这种伪程序是新序列的十六进制运算的一种模拟,真正的基于新序列的十六进制的运算是直接运行十六进制运算的器件基础之上的。

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-2-21 15:25 , Processed in 0.180690 second(s), 19 queries .

快速回复 返回顶部 返回列表