P-Q- системы счистления. Имеют два основания. В одном данные храняться, а в другом представляются.
BCD
BCD is (Binary Coded Decimal). Храняться десятичные данные в двоичном коде Не все состояния двоичного кода являются допустимыми. Классический BCD: (Код 8-4-2-1) ----------------- Число Значение ----------------- 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 -----------------
Как вычислять? Сложение/вычитание - после них коррекция
+-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+ = ------------------- +-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+ ^ ------+--- возможно нужна коррекция | +------ возможен перенос. hex 12 + 75 ---- 87 все хорошо hex 019 + 185 ----- 19E переноса нет но нужна коррекция младшего разряда (+6) ----- 190 14 после коррекции возник перенос (+1 в 2 разряде) ----- 1A4 нужна коррекция следущего разряда (+6 во 2м разряде) ----- 104 10 после коррекции возник перенос (+1 в третьем разряде) ----- 204 19 + 28 ----- 41 число нормальное, но возник перенос, делаем коррекцию ----- 47 x86: команды DAA, DAS DAA if ((AL and 0Fh) > 9 or (AF == 1)) { AL <- AL + 6 AF <- 1 } if ((AL > 9Fh) or (CF == 1)) { AL <- AL + 60h CF <-1 }
DAS if ((AL and 0Fh) > 9 or (AF == 1)) { AL <- AL - 6 AF <- 1 } if ((AL > 9Fh) or (CF == 1)) { AL <- AL - 60h CF <- 1 }
BCD (код с избытком 3): Преймущества BCD с избытком 3. -X = NOT(A) + 1 2 = 0101 NOT(2) = 1010 = 7 7 + 1 = 1011 = 8 -2 = 8 (10 - 2) = 8 ----------------- Число Значение ----------------- 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100 ----------------- Остальные комбинации не используются. Еще одно преймущество - это относительная простота схем для сложения: C{p+1} = 0, если A{p} + B{p} + C{p} < 16 1, если A{p} + B{p} + C{p} >= 16 S{p} = A{p} + B{p} + C{p} + 13, если C{p+1} = 0 A{p} + B{p} + C{p} + 3, если C{p+1} = 0 BCD с избытком 3
Существуют и другие методы кодирования десятичных чисел в двоичные: Например код 4221: -------------------- Число 4221 4221 -------------------- 0 0000 1 0001 2 0010 3 0011 4 1000 5 0111 1001 6 1100 1010 7 1101 1011 8 1110 9 1111 -------------------- код 4221
Код 5421 Правило: если число >=5, то устанавливается бит 5. Далее все однозначно. ------------- Число 5421 ------------- 0 0000 1 0001 2 0010 3 0011 4 0100 5 1000 6 1001 7 1010 8 1011 9 1100 ------------- код 5421
Унитарный код (его еще называют кодом "1 из N") Каждой цифре предоставляем свой разряд (1 только в одной позиции N-разрядного кода) ------------------- Число Значение ------------------- 0 0000000001 1 0000000010 2 0000000100 3 0000001000 4 0000010000 5 0000100000 6 0001000000 7 0010000000 8 0100000000 9 1000000000 ------------------- Унитарный код
Код 74210 (его еще называют "2 из 5") использует все возможные перестановки из 5 символов с 2 единицами (их 10 штук). Премущества - если один из битов измениться - сразу видно что ошибка. Потому что число единиц будет нечетное. ----------------- -------------------- Число 74210 Перестановка Число ----------------- -------------------- 0 11000 XXX-- 1 1 00011 XX-X- 2 2 00101 X-XX- 4 3 00110 -XXX- 7 4 01001 XX--X 3 5 01010 X-X-X 5 6 01100 -XX-X 8 7 10001 X--XX 6 8 10010 -X-XX 9 9 10100 --XXX 0 ---------------- -------------------- код 74210