16-ти гексадецитный (16-ти разрядный) сумматор
Так как в разряде переноса не бывает значения больше 1, то таблица истинности имеет 16*16*2=512 колонок,
которые из-за большой величины здесь не приводятся, но гексадециты суммы по модулю 16 и переноса
выводятся на экран и приведены на скриншоте результата выполнения нижеприведённой программы
на Turbo Basic'е:
Code: Select all
CLS
COLOR 10,0
'adder initialisation
DIM HexaDecimal$(15),HDTD$(15),HDTD%(15)
DATA "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
FOR I%=0 TO 15
READ HexaDecimal$(I%)
NEXT I%
DIM F3HDS%(15,15,1),F3HDC%(15,15,1)
FOR K%=0 TO 1
FOR J%=0 TO 15
FOR I%=0 TO 15
F3HDS%(I%,J%,K%)=(I%+J%+K%) MOD 16
F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
PRINT HexaDecimal$(F3HDS%(I%,J%,K%));
NEXT I%
NEXT J%
NEXT K%
PRINT
FOR K%=0 TO 1
FOR J%=0 TO 15
FOR I%=0 TO 15
F3HDC%(I%,J%,K%)=(I%+J%+K%) \ 16
PRINT HexaDecimal$(F3HDC%(I%,J%,K%));
NEXT I%
NEXT J%
NEXT K%
PRINT
PRINT
'input numbers
A$="000F00F00F00F00F"
B$="000B00C00D00E00F"
C%=0
PRINT A$
PRINT B$
PRINT "----------------"
DIM A$(15),B$(15),A%(15),B%(15),S%(15)
FOR I%=0 TO 15
A$(I%)=MID$(A$,16-I%,1)
IF ASC(A$(I%))<58 THEN A%(I%)=VAL(A$(I%)) ELSE A%(I%)=ASC(A$(I%))-&H37
B$(I%)=MID$(B$,16-I%,1)
IF ASC(B$(I%))<58 THEN B%(I%)=VAL(B$(I%)) ELSE B%(I%)=ASC(B$(I%))-&H37
NEXT I%
MTIMER
'adding
FOR I%=0 TO 15
S%(I%)=F3HDS%(A%(I%),B%(I%),C%)
C% =F3HDC%(A%(I%),B%(I%),C%)
NEXT I%
ElapsedTime=MTIMER
FOR I%=15 TO 0 STEP -1
PRINT HexaDecimal$(S%(I%));
NEXT I%
PRINT
PRINT
PRINT "It took";ElapsedTime;"microseconds"
END
время сложения почти не зависит от основания системы счисления и от количества переносов.
Из этого следует, что при последовательном сложении на программных табличных сумматорах, чем больше основание системы счисления, тем больше мощность сумматора.