Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизДвоично-десятичные числа Найти похожие ветки
← →
kat (2002-04-27 10:11) [0]Меня попросили написать курсовую "Вычитание двоично-десятичных чисел". Там сначало надо преобразовать двоичные числа в двоично десятичные, потом вычесть, а потом опять преобразовать к двоичному числу. Может быть кто-нибудь делал что-то такое, не могли бы помочь с кодом? Пожалуйста
← →
AFROLOV (2002-04-27 10:20) [1]А что такое двоично десятичные числа?
← →
Alx2 (2002-04-27 10:24) [2]В полубайте сидят значения 0..9
← →
Romkin (2002-04-27 10:24) [3]У x86 архитектуры исторически есть все команды ассемблера и для преобразований, и для операций с двоично-десятичными числами. Просто найди учебник по ассемблеру, и оттуда
2AFROLOV : это когда 4 бита используются для записи числа от 0 до 9, поэтому байт содержит 2 цифры, и всего от 0 до 99
← →
MBo (2002-04-27 10:25) [4]http://www.atmel.ru/AVR/BINBCD.htm
поиск
← →
kat (2002-04-27 10:31) [5]Расскажу на примере
Есть число 57319 - в десятичной системе
Его можно преобразовать к упакованному и неупакованному виду 2-10системы
|05|73|09
0000 0101|0111 0011|0001 1001 -упакованный
57319
0000 0101|0000 0111|0000 0011|0000 0001|0000 1001 -неупакованный
← →
kat (2002-04-27 10:35) [6]http://www.atmel.ru/AVR/BINBCD.htm я нашла, только не поняла как преобразовать Например
11001001 в 2-системе к 2-10системе
← →
Anatoly Podgoretsky (2002-04-27 10:49) [7]kat © (27.04.02 10:11)
Ромкин ответил, можно конечно и без АСМ, но морока
AFROLOV © (27.04.02 10:20)
BCD
Alx2 © (27.04.02 10:24) & Romkin © (27.04.02 10:24)
Может и байт занимать, упакованные и неупакованные
kat © (27.04.02 10:31)
О прекрасно разбираешься с темой!
kat © (27.04.02 10:35)
Черех операции деления по модулю 10
N div 10, N mod 10 и дальше ручная упаковка по байтам.
← →
kat (2002-04-27 11:20) [8]А никто не встречал такого алгоритма на паскале?
← →
MBo (2002-04-27 11:21) [9]а тебе упакованный или нет?
← →
kat (2002-04-27 11:28) [10]оба, хотя бы упакованный увидеть, неупакованный аналогично
← →
MBo (2002-04-27 11:33) [11]двоичные даны в виде Integer или строк "10010011"
← →
kat (2002-04-27 11:48) [12]строки
← →
Romkin (2002-04-27 12:30) [13]38 Hex = 56 dec = 0011 1000 bin
BCD: 56 (0101 0110 bin) - упакованный
0506H - неупакованный
Если не ошибаюсь :-))
Есть алгоритм простого преобразования байта в BCD, без делений по модулю - только логические операции. Позабыл вот только
← →
MBo (2002-04-27 12:35) [14]вот в bcd перевод
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ["0","1",#8,#9,#13]) then key:=#0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var sbin:string;
i,k,ibcd:integer;
idec:integer;
b:byte;
begin
sbin:=edit1.text;
k:=0;
idec:=0;
for i:=length(sbin) downto 1 do begin
b:=ord(sbin[i])-ord("0");
idec:=idec or (b shl k);
inc(k);
end;
label1.caption:=inttostr(idec);
k:=0;
ibcd:=0;
while idec>0 do begin
b:=idec mod 10;
ibcd:=ibcd or (b shl k);
inc(k,4);
idec:=idec div 10
end;
label2.caption:=inttostr(ibcd);
end;
← →
aabark (2002-04-27 12:57) [15]Дело это не очень страшное .
Лет 20 назад я этим занимался на ЕС ЭВМ .
Была даже программа перевода чисел текст
( одна тысяча двести восемьдесят руб. 00 коп ) .
Максимально двочно-десятичное число на ЕС могло
иметь только 15 цифр ( + знак ) !!
Когда Егорушко Гайдар пришел к власти -
нам 15 цифр стало нехватать , но тут я с завода
ушел в "свободное плавание" и в , часности ,
на Delphi 1.0 + IB4 ( NetWare ) в банке
написал ряд задач .
Вот такие ассоциации вызвал ваш вопрос ...
Дерзайте , молодые , дерзайте ...
← →
MBo (2002-04-27 13:19) [16]Держи, Катюша
function BinStrToInt(s:string):integer;
var i,k:integer;
begin
result:=0;
k:=0;
for i:=length(s) downto 1 do begin
Result:=Result or ((ord(s[i])-ord("0")) shl k);
inc(k);
end;
end;
function IntToBCD(i:integer):Integer;
var k:integer;
begin
k:=0;
Result:=0;
while i>0 do begin
Result:=Result or ((i mod 10) shl k);
inc(k,4);
i:=i div 10;
end;
end;
function BCDAdd(b1,b2:integer):integer;
var i,j,perenos:integer;
begin
Result:=0;
perenos:=0;
for i:=0 to 7 do begin
j:=perenos+((b1 shr (4*i)) and $F)+((b2 shr (4*i))and $F);
Result:=Result or ((j mod 10) shl (4*i));
perenos:=j div 10;
end;
end;
function BCDToInt(b:integer):integer;
var k:integer;
begin
result:=0;
k:=1;
while b>0 do begin
Result:=Result + k*(b and $F);
b:=b shr 4;
k:=k*10;
end;
end;
function IntToBinStr(I:integer):string;
begin
Result:="";
while i>0 do begin
Result:=Chr((I and 1)+$30)+Result;
I:=I shr 1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
ibcd1,ibcd2,ibcd3:integer;
begin
s1:=edit1.text;
ibcd1:=IntToBCD(BinStrToInt(s1));
s2:=edit2.text;
ibcd2:=IntToBCD(BinStrToInt(s2));
ibcd3:=BCDadd(ibcd1,ibcd2);
label2.caption:=InttoBinStr(BCDToInt(ibcd3));
end;
← →
kat (2002-04-27 13:39) [17]MBo © (27.04.02 13:19) спасибо
Но сделано что сначало 2-ой число переводится в 10-ое, а только потом в 2-10-ое.
Нужен алгоритм непосредственного перевода из 2-ой системы в 2-10систему. И числа могут быть не только целые.
И вообще дурацкое задание. Но что-нибудь придумаю
← →
MBo (2002-04-27 13:45) [18]просто объедини две функции в одну.
поиском в yandex найдешь кучу ссылок
← →
Anatoly Podgoretsky (2002-04-27 14:11) [19]kat © (27.04.02 13:39)
О так ты о чистом BCD, там первый байт хранит значение о порядке, правила особые
← →
kat (2002-04-27 15:34) [20]Не понятно стало малость
А как например 0.625 в 10-системе представить в 2-10системе?
А то я запуталась
← →
MBo (2002-04-27 15:40) [21]это 0.101 в двоичной, а как в BCD нормализация и порядок делается, не знаю.
← →
Anatoly Podgoretsky (2002-04-27 15:48) [22]625-E3
Я бы подсказал, как но нет под рукой документации, знаю, что это 10 байт структура и старший байт хранит информацию о порядке и знаке числа, вроде бы FPU это напрямую поддерживает, но возможно ошибаюсь
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c