Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двоичная система исчисления 
:(
    Опции темы
Akella
  Дата 20.12.2004, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Подскажите, как представить число в двоичной системе исчисления и обратно

не смейтесь smile
PM MAIL   Вверх
Bes
Дата 20.12.2004, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Обратно куда?.... в десятичную. :-) Ща че-нить попробую наваять.

Так, вообщем чтобы из двоичной в десятичную перевести существует алгоритм. (кстати поищи в этом разделе - может там чего есть.)

например двоичное число

100101

нумеруем его с хвоста начиная с нуля т.е.

5 4 3 2 1 0
|_|_|_|_|_|
1 0 0 1 0 1

теперь каждую двоичную цифру умножаем на 2 возводим в степень = нумерации и складываем т.е.

(2*1)^5+(2*0)^4+(2*0)^3+(2*1)^2+(2*0)^1+(2*1)^0=
32+0+0+4+0+1=37
проверяем калькулятором =37 ч.т.д.
на счет обратно не помню, но подумаю.

Это сообщение отредактировал(а) Bes - 20.12.2004, 15:45
PM MAIL   Вверх
кварк
Дата 20.12.2004, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 2.8.2002

Репутация: нет
Всего: нет



Цитирую раздел FAQ DRKB (от себя советую его скачать ~15Mb):

Код

Для преобразования числа в двоичную запись удобно использовать функции shl и and.
Эта функция преобразует число в строку из единиц и нулей. Количество цифр определяется параметром Digits.


function IntToBin(Value: integer; Digits: integer): string;
var
 i: integer;
begin
 result := '';
 for i := 0 to Digits - 1 do begin
   if Value and (1 shl i) > 0
     then result := '1' + result
     else result := '0' + result;
 end;
end;
Вот пример использования этой функции:


procedure TForm1.Edit1Change(Sender: TObject);
begin
 Form1.Caption := IntToBin(StrToIntDef(Edit1.Text, 0), 128);
end;

Взято с сайта http://blackman.wp-club.net/

PM MAIL   Вверх
Bes
Дата 20.12.2004, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Ага, обратно так:
десятичное число делим все время на 2 до нуля и остаток записываем справа налево.
т.е.
37 делим на 2 = 18 и 1 ост =1
18 / 2 = 9 и 0 ост =01
9 / 2 = 4 и 0 ост =101
4 / 2 = 2 и 0 ост =0101
2/2 = 1 и 0 ост =00101
1/2 = 0 и 1 ост =100101

все 0
PM MAIL   Вверх
Akella
Дата 22.12.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
Цитирую раздел FAQ DRKB (от себя советую его скачать ~15Mb):

Скачано сразу после появления, не волнуйся, а есть ли BinToInt
Спасибо за ответ, но меня еще волновал вопрос о том, как ручками (алгоритм), Bes помог.

и как перевести, например 16989,8956
PM MAIL   Вверх
_hunter
Дата 22.12.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



тут немного интереснее.
береш 0.8956 и умножаеш его на два:
1,79812
потом умножаеш на два результат ( после запятой ):
1,59624
и так до... ( пока не будет получен ноль или достигнута необходимая точность )

обратный перевод -- умножаеш 1 на 2 в степени -к ( при 0.8956 -- нулевая степень )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 22.12.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



_hunter, объясни, пожалуйста подробнее, если можно, конечно
заранее благодарю
Добавлено @ 13:03
вот, что я нашел
http://forum.vingrad.ru/index.php?showtopi...темы+исчисления
PM MAIL   Вверх
_hunter
Дата 22.12.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



а что именно объяснить ( кажись и так все понятно... )
может в аську стукни


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 22.12.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



объясните мне это
Например, число 0.625.
В двоичной системе 0.625=1*2^(-1)+0*2^(-2)+1*2^(-3)=101b * 2^(-1).
Первый бит отбрасываем, получаем 01b.
Экспонента будет равна -1+127=126.

PM MAIL   Вверх
_hunter
Дата 22.12.2004, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



этого я тоже не понимаю smile
( есть подозрение что это пример перевода из двоичной в десятичную наоборот )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bes
Дата 27.12.2004, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



По моему чисел сточкой в двоичном представлении не бывает, а такие вещи как рил и экстендед хитрый механизм где для хранения дробной части отведены лишние байты.
PM MAIL   Вверх
Akella
Дата 27.12.2004, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
По моему чисел сточкой в двоичном представлении не бывает,


бывает
PM MAIL   Вверх
dm9
Дата 27.12.2004, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



PM MAIL ICQ   Вверх
_hunter
Дата 27.12.2004, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



бывают smile. причем я описывал алгоритм перевода.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bes
Дата 28.12.2004, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2hunter: ну и я не увидел результата перевода в двоичном виде.
PM MAIL   Вверх
_hunter
Дата 28.12.2004, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Цитата
ну и я не увидел результата перевода в двоичном виде

в смысле? ( а что ты ожидал увидеть? )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dm9
Дата 28.12.2004, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Bes, посмотри мою ссылку. Там всё подробно расписано про дробные числа.
PM MAIL ICQ   Вверх
Bes
Дата 28.12.2004, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2dm9:
Ага, почитал. Ну вообщем понятно. т.е. с чисто мат-ой точки зрения просто ставим запятую - логично.
PM MAIL   Вверх
_hunter
Дата 28.12.2004, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



запятая ставится не просто а хитро smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 28.12.2004, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



что значит хитро?
PM MAIL   Вверх
_hunter
Дата 28.12.2004, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



запятая поставленная просто -- это берем число после запятой за простой int и переводим его в bin
а поставленная хитро -- это перевод по 2 в отрицательной степени


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 30.12.2004, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



короче переведи число 126,7 в двоичную систему счисления
PM MAIL   Вверх
_hunter
Дата 30.12.2004, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



126, думаю, и сам переведеш, а 0,7:
010110011001


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 30.12.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
126, думаю, и сам переведеш, а 0,7:
010110011001


я не просил результат, честно говоря, приведи пример, как говориться, на пальцах розложи, пожалуйста, очень прошу.

как будет полностью выглядеть запись? Она что, из двух частей будет состоять?

Это сообщение отредактировал(а) dsergey - 30.12.2004, 12:51
PM MAIL   Вверх
_hunter
Дата 30.12.2004, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Цитата
береш 0.8956 и умножаеш его на два:
1,79812
потом умножаеш на два результат ( после запятой ):
1,59624
и так до... ( пока не будет получен ноль или достигнута необходимая точность )

обратный перевод -- умножаеш 1 на 2 в степени -к ( при 0.8956 -- нулевая степень )

почему из двух?
число приводится к виду 0,ххх
т.е. 0,1267


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Pathfider
Дата 30.12.2004, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: -1
Всего: 1



Для перевода необходимо делить число на основание новой системы счисления, до тех пор, пока очередное частное от деления не станет меньше основания новой системы счисления. Тогда остатки от деления, записанные цифрами новой системы счисления в порядке , начиная с последнего , будут являться цифрами числа в новой СС.
Например:
173(10) в ?(2)
Код

173|_2
172   86|_2
  1   86    43|_2
       0    42   21|_2
             1   20   10|_2
                  1   10    5|_2
                       0    4    2|_2
                            1    2    1|_2
                                 0    0   0
                                      1

Затем собираем все цифры, начиная с последней:
10101101 - 173(2)
Наоборот, в двоичную:
1 0 1 0 1 1 0 1 - 173
7 6 5 4 3 2 1 0 - 1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 173
Все очень просто.
--------------------
Trust is a weakness
PM MAIL   Вверх
_hunter
Дата 31.12.2004, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



это для int' a. для float -- по-другому переводится


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bes
Дата 31.12.2004, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2_hunter: Балин, хантер, ты так от начала до конца и не показал ни одного примера давай 3.14 переведи полностью бес цитат, тем более, что с точки зрения программиста ис твоей цитаты следует, что если 0.8956 умножать на 2 то когда-нибудь получишь или 0 или "точность" большую исходного числа - хрень какая-то :-( по-подробнее пожалуйста - не понятно.
Видимо ты не раз это делал, но редко объяснял. :-)

Это сообщение отредактировал(а) Bes - 31.12.2004, 07:53
PM MAIL   Вверх
_hunter
Дата 31.12.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



до конца -- это докуда?
и при чем тут умножение 0.8956? Алгоритм ведь не для одного числа писался ;) Попробуй, например, 0.5 на два поумножать smile
откуда вывод про "точность" большую исходного числа я так и не понял smile

объяснял, действительно, редко smile

ну а теперь сам перевод smile
приводим 3.14 к виду 0.314
0,314*2 = ,628 ( 2^-1 )
,628*2 = 1,256 ( 2^-2 )
,256*2= 0,512 ( 2^-3 )
,512*2 = 1,024 ( 2^-4 )
,024*2 = ,048 ( 2^-5 )
,048*2 = ,096 ( 2^-6 )
,096*2 = ,192 ( 2^-7 )
,192*2 = ,384 ( 2^-8 )
,384*2 = ,768 ( 2^-9 )
,768*2 = 1,536 ( 2^-10 )
и так до "пока не надоест" -- мне надоело smile
для обратного перевода считаем 2^-2 + 2^-4 + 2^-10
и получаем 0.313
епсилон = 0,001


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Pathfider
Дата 1.1.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: -1
Всего: 1



dsergey Вот тебе все и объяснили, помоему достаточно доходчиво. Есть еще чего непонятного?
--------------------
Trust is a weakness
PM MAIL   Вверх
_hunter
Дата 1.1.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



смешно smile
даже очень


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guest
Дата 12.10.2005, 17:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











решите кто-нибудь вот это ( тока сёдня надо!!!!!!):
D42(16) - 52(8) + 11011(2)
В скобках система исчисления..... smile
  Вверх
SoWa
Дата 12.10.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Код

function FromToAnySys(fromSys,ToSys: integer; chislo: string): string;
var
i,k,mo: integer;
d: int64;
buk: int64;
step: int64;
s,sl: string;
s1: int64;
m: string;

function revert(n: string): string;
var i: integer;
q: string;
begin
for i:=length(n) downto 1 do
 begin
  q:=q+n[i];
 end;
 revert:=q;
end;

begin
 m:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 s:='';
d:=0;
for i:=1 to length(chislo) do
 begin
  for k:=1 to 37 do
   begin
    if chislo[i]=m[k] then buk:=k-1;
   end;
  step:=strtoint(floattostr(power(FromSys,(length(chislo)-i))));
  d:=d+(buk*step);
 end;

while d<>0 do
 begin
  mo:=d mod ToSys;
  s:=s+{inttostr(mo)}m[mo+1];
  d:=d div ToSys;
 end;

result:=revert(s);
end;


Посчитай сам...


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
cardinal
Дата 12.10.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Или воспользуйся калькулятором в windows...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
MacTep
Дата 18.6.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



SoWa, а как сделать, чтобы эта функция еще и дробные числа переводила?  

Это сообщение отредактировал(а) MacTep - 18.6.2006, 19:13


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1352 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.