Страница 1 из 1
Добавлено: 14 май 2004, 23:01
GOS
Если нужен совет, то каждая цифра или буква шеснадцатиричного коде будет представлена четырьмя битами двоичного счисления!
(1h->0001 2h->0010 ... F->1111)
Всё это обрабатывается в цикле.
Если надо сделать, то в другой раздел

Добавлено: 15 май 2004, 19:51
Pepper
Нужно разделить число на основание системы, в которую переводят (в данном случае на 2) и найти остаток. Если целая часть частного получилась не равной нулю то ее делят на основание системы счисления. Так продолжают до тех пор, пока целая часть частного не станет равной нулю.
Код: Выделить всё
a:=0; //a - число которое мы должны в итоге получить
r:=1;
while n>=1 do // n-число в той системе счисления из которой переводим
begin
a:=a+(n mod p)*r; // p- основание системы в которую переводим
r:=r*10;
n:= n div p;
end;
Добавлено: 29 мар 2005, 18:38
Хыиуду
Вообще-то для хранения двоичных чисел лучше использовать строки (в идеале, конечно, boolean, но он сложно представим). Иначе число, большее 1024, будет представлено комбинацией 0 и 1 длиной более 10 символов, а это даже в longint не влезет. А для 16-ричных чисел сам Вирт велел пользоваться стрингами. Поэтому я из 10-й в 2-ю обычно перевожу так
Код: Выделить всё
function dec2bin(x:integer):string;
var s:string;
begin
s:='';
while x>0 do
begin
s:=chr(ord('0')+x mod 2)+s;
x:=x div 2;
end;
dec2bin:=s;
end;
А если переводить из 10-й в 16, придется поизвращаться. Цикл внутри функции будет выглядеть так:
Код: Выделить всё
while x>0 do
begin
if x mod 16 <10 then
s:=chr(ord('0')+x mod 16)+s
else
s:=chr(ord('A')+(x mod 16 - 10))+s;
x:=x div 16;
end;
Добавлено: 01 апр 2005, 12:34
Naeel Maqsudov
Вот вы все о целых числах, а с дробными слабо?

Вот вам дробные
Добавлено: 01 апр 2005, 14:08
Хыиуду
Лады. Тогда так: в начале работы программы пишем:
Код: Выделить всё
const N=20;{сколько символов отводится на запись числа}
var x,fracx:real; intx:longint;
begin
intx:=trunc(x);
fracx:=frac(x);
{Дальше intx переводится в 2х или 16х, как учили. Результат пусть лежит в строке s}
s:=s+'.';
while length(s)<=N do
begin
fracx:=fracx*2; {или на 16 соответственно}
s:=s+dec2bin(trunc(fracx)); {или опять же, dec2hex соответственно}
fracx:=frac(x);
end;
To Naeel Maqsudov: только не надо просить еще и с отрицательными числами делать, ладно? Так не хочется возиться со всеми этими обратными кодами, дополнительными кодами... Полгода как это сдал, и обратно вспоминать не хочу!

)
Просьба
Добавлено: 13 окт 2006, 23:27
Shakal
Всем хай! у меня такая же проблема как и у 000 я не могу перевести из 16ти ричной в 2ую хм GOS не мог бы по конкретнее объяснить (если можно уже сделанную ) ) выложить ?)
