| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Двоичная система исчисления |
| Автор: Akella 20.12.2004, 15:01 |
| Подскажите, как представить число в двоичной системе исчисления и обратно не смейтесь |
| Автор: Bes 20.12.2004, 15:30 |
| Обратно куда?.... в десятичную. :-) Ща че-нить попробую наваять. Так, вообщем чтобы из двоичной в десятичную перевести существует алгоритм. (кстати поищи в этом разделе - может там чего есть.) например двоичное число 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 ч.т.д. на счет обратно не помню, но подумаю. |
| Автор: кварк 20.12.2004, 15:42 | ||
Цитирую раздел FAQ DRKB (от себя советую его скачать ~15Mb):
|
| Автор: Bes 20.12.2004, 15:53 |
| Ага, обратно так: десятичное число делим все время на 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 |
| Автор: Akella 22.12.2004, 12:28 | ||
Скачано сразу после появления, не волнуйся, а есть ли BinToInt Спасибо за ответ, но меня еще волновал вопрос о том, как ручками (алгоритм), Bes помог. и как перевести, например 16989,8956 |
| Автор: _hunter 22.12.2004, 12:49 |
| тут немного интереснее. береш 0.8956 и умножаеш его на два: 1,79812 потом умножаеш на два результат ( после запятой ): 1,59624 и так до... ( пока не будет получен ноль или достигнута необходимая точность ) обратный перевод -- умножаеш 1 на 2 в степени -к ( при 0.8956 -- нулевая степень ) |
| Автор: Akella 22.12.2004, 12:59 |
| _hunter, объясни, пожалуйста подробнее, если можно, конечно заранее благодарю Добавлено @ 13:03 вот, что я нашел http://forum.vingrad.ru/index.php?showtopic=3768&hl=Системы+исчисления |
| Автор: _hunter 22.12.2004, 13:12 |
| а что именно объяснить ( кажись и так все понятно... ) может в аську стукни |
| Автор: Akella 22.12.2004, 13:23 |
| объясните мне это Например, число 0.625. В двоичной системе 0.625=1*2^(-1)+0*2^(-2)+1*2^(-3)=101b * 2^(-1). Первый бит отбрасываем, получаем 01b. Экспонента будет равна -1+127=126. |
| Автор: _hunter 22.12.2004, 13:27 |
| этого я тоже не понимаю ( есть подозрение что это пример перевода из двоичной в десятичную наоборот ) |
| Автор: Bes 27.12.2004, 15:49 |
| По моему чисел сточкой в двоичном представлении не бывает, а такие вещи как рил и экстендед хитрый механизм где для хранения дробной части отведены лишние байты. |
| Автор: Akella 27.12.2004, 17:36 | ||
бывает |
| Автор: dm9 27.12.2004, 19:25 |
| http://vestikinc.narod.ru/AB/ |
| Автор: _hunter 27.12.2004, 20:18 |
| бывают |
| Автор: Bes 28.12.2004, 09:21 |
| 2hunter: ну и я не увидел результата перевода в двоичном виде. |
| Автор: _hunter 28.12.2004, 12:11 | ||
в смысле? ( а что ты ожидал увидеть? ) |
| Автор: dm9 28.12.2004, 12:26 |
| Bes, посмотри мою ссылку. Там всё подробно расписано про дробные числа. |
| Автор: Bes 28.12.2004, 13:32 |
| 2dm9: Ага, почитал. Ну вообщем понятно. т.е. с чисто мат-ой точки зрения просто ставим запятую - логично. |
| Автор: _hunter 28.12.2004, 13:41 |
| запятая ставится не просто а хитро |
| Автор: Akella 28.12.2004, 13:42 |
| что значит хитро? |
| Автор: _hunter 28.12.2004, 13:45 |
| запятая поставленная просто -- это берем число после запятой за простой int и переводим его в bin а поставленная хитро -- это перевод по 2 в отрицательной степени |
| Автор: Akella 30.12.2004, 09:59 |
| короче переведи число 126,7 в двоичную систему счисления |
| Автор: _hunter 30.12.2004, 12:46 |
| 126, думаю, и сам переведеш, а 0,7: 010110011001 |
| Автор: Akella 30.12.2004, 12:49 | ||
я не просил результат, честно говоря, приведи пример, как говориться, на пальцах розложи, пожалуйста, очень прошу. как будет полностью выглядеть запись? Она что, из двух частей будет состоять? |
| Автор: _hunter 30.12.2004, 17:36 | ||
почему из двух? число приводится к виду 0,ххх т.е. 0,1267 |
| Автор: Pathfider 30.12.2004, 22:28 | ||
| Для перевода необходимо делить число на основание новой системы счисления, до тех пор, пока очередное частное от деления не станет меньше основания новой системы счисления. Тогда остатки от деления, записанные цифрами новой системы счисления в порядке , начиная с последнего , будут являться цифрами числа в новой СС. Например: 173(10) в ?(2)
Затем собираем все цифры, начиная с последней: 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 Все очень просто. |
| Автор: _hunter 31.12.2004, 00:44 |
| это для int' a. для float -- по-другому переводится |
| Автор: Bes 31.12.2004, 07:52 |
| 2_hunter: Балин, хантер, ты так от начала до конца и не показал ни одного примера давай 3.14 переведи полностью бес цитат, тем более, что с точки зрения программиста ис твоей цитаты следует, что если 0.8956 умножать на 2 то когда-нибудь получишь или 0 или "точность" большую исходного числа - хрень какая-то :-( по-подробнее пожалуйста - не понятно. Видимо ты не раз это делал, но редко объяснял. :-) |
| Автор: _hunter 31.12.2004, 13:39 |
| до конца -- это докуда? и при чем тут умножение 0.8956? Алгоритм ведь не для одного числа писался ;) Попробуй, например, 0.5 на два поумножать откуда вывод про "точность" большую исходного числа я так и не понял объяснял, действительно, редко ну а теперь сам перевод приводим 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 ) и так до "пока не надоест" -- мне надоело для обратного перевода считаем 2^-2 + 2^-4 + 2^-10 и получаем 0.313 епсилон = 0,001 |
| Автор: Pathfider 1.1.2005, 14:42 |
| dsergey Вот тебе все и объяснили, помоему достаточно доходчиво. Есть еще чего непонятного? |
| Автор: _hunter 1.1.2005, 14:46 |
| смешно даже очень |
| Автор: Guest 12.10.2005, 17:28 |
| решите кто-нибудь вот это ( тока сёдня надо!!!!!!): D42(16) - 52(8) + 11011(2) В скобках система исчисления..... |
| Автор: SoWa 12.10.2005, 18:29 | ||
Посчитай сам... |
| Автор: cardinal 12.10.2005, 19:17 |
| Или воспользуйся калькулятором в windows... |
| Автор: MacTep 18.6.2006, 19:12 |
| SoWa, а как сделать, чтобы эта функция еще и дробные числа переводила? |