| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > вывести integer в виде массива бит |
| Автор: СЭНСЭЙ 6.4.2009, 10:29 |
| Привет всем. Подскажите как попроще вывести значение integer (к примеру) в виде массива бит |
| Автор: CodeMonkey 6.4.2009, 10:38 | ||
Я бы сделал как-то так (писал на коленке, могут быть ошибки):
|
| Автор: СЭНСЭЙ 6.4.2009, 10:41 |
| Хм.. Очень интересно и красиво!!! А попроще никак? |
| Автор: CodeMonkey 6.4.2009, 10:58 |
| Попроще - это как? Типа, чтоб препод сразу понял, что сами писали? |
| Автор: MetalFan 6.4.2009, 11:27 | ||
накидал на коленке "по проще".
ABuf можно обозначить любым простым типом. з.ы. но в коде есть ошибка |
| Автор: Андре 6.4.2009, 14:09 | ||
Берем готовую функцию IntToHex и модернизируем немножко.
|
| Автор: mes 6.4.2009, 14:23 |
нда.. форум то по паскалю, а не по асму. И вобще в чем смысл то, делать непереносимым решение для задачи, не требущей критической оптимизации ?! |
| Автор: marinovsoft 6.4.2009, 14:53 | ||||
Вот, писал на коленках:
А это из работающей программы скопировано
Сама работающая программа здесь _http://marinovsoft.narod.ru/korvet/msxcas.rar |
| Автор: MetalFan 6.4.2009, 15:37 |
| имхо у миня лучче всех получилось) |
| Автор: CodeMonkey 6.4.2009, 15:54 |
Я так думаю, что каждому свой вариант нравится лучше остальных ;) |
| Автор: mes 6.4.2009, 15:56 |
но откуда взялось 36 ?! |
| Автор: CodeMonkey 6.4.2009, 15:58 |
А вдруг чо! О_О |
| Автор: Akella 6.4.2009, 16:02 |
Как это откуда? Со справочника Стэля. |
| Автор: MetalFan 6.4.2009, 16:27 |
хтоето??? а взялось из SizeOf( Integer ) * 8 |
| Автор: mopsa 6.4.2009, 16:44 | ||
но это будет 32 но метод MetalFan`a после небольшой поправки мне кажется лучьшим |
| Автор: CodeMonkey 6.4.2009, 17:50 | ||
Вот ещё до кучи вариант моего варианта - стал пострашнее, но зато работает в два раза быстрее MetalFan-ского. Правда, если заменить копирование в Dst на Move (для варианта со String в D2009), то прирост скорости будет всего около 25-ти процентов.
А реализация через CvtInt работает в 2.5 раза медленнее MetalFan-ской - но зато она проще всего в реализации (всего-то и надо, как цифирьку 16 в IntToHex поменять на 2-ку). |
| Автор: MetalFan 6.4.2009, 18:17 |
ну конееечно! хитрый! сразу 4 символа в один заход пишешь... а если таблицу расширить до полного байта, то еще быстрее дело пойдет ;) зы. зато мой вариант нагляднее и понятнее) и преподу его проще объяснить ;) имхо |
| Автор: CodeMonkey 6.4.2009, 19:48 | ||
Ага |
| Автор: MetalFan 6.4.2009, 20:13 |
а ее можно при запуске приложения генерировать) |
| Автор: Beltar 7.4.2009, 10:36 | ||
Или я не прав? |
| Автор: mes 7.4.2009, 12:59 | ||
SizeOf() возвращает кол-во байт, а не бит в остальном Ваш пример производное от вышеупомянутых аналогов, с отличием в том, что там сдвигается само значение, а у вас бит в маске. Добавлено через 3 минуты и 32 секунды
только тогда PInteger не подойдет |
| Автор: CodeMonkey 7.4.2009, 13:06 | ||
Ну можно ведь и Move использовать. ... и даже вырвать оттуда кусок для копирования 8-16 байт (16-ть - для unicode), чтоб не вызывать функцию в цикле. Но под таблицу надо будет несколько Кб. |
| Автор: mes 7.4.2009, 13:12 |
можно, но имхо овчинка выделки не стоит, чтоб идти дальше таблицы из 4х байт |
| Автор: bems 7.4.2009, 14:44 |
предлагаю SetLength(Result, 42 ); |
| Автор: MetalFan 7.4.2009, 16:16 |
| [off] а поччему не 24? ))) может тогда лучше 44? типа как в анекдоте)[/off] |
| Автор: bems 7.4.2009, 17:16 |
| MetalFan, потому что http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%B2%D0%B5%D1%82_%D0%BD%D0%B0_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8,_%D0%B2%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D0%B2%D1%81%D0%B5%D0%B3%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B3%D0%BE |