|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.10.2008, 06:34 | #1 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
выделить бит
Задача такая: нужно выделить бит в байте, то есть написать функцию, которая выдает значение истина, если n-ый бит (считая "справа" с 0) в байте равен 1, и ложь - если равен нулю.
function Bit1(bt,n:byte):boolean; написала че-то на ассемблере, но как-то на удивление громоздко получилось, может кто подскажет как это сделать на паскале? |
11.10.2008, 08:06 | #2 |
Андрей
Форумчанин
Регистрация: 21.11.2006
Сообщений: 457
|
Код:
ICQ: 5311314
[SIGPIC][/SIGPIC] |
11.10.2008, 20:18 | #3 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
тоже не очень быстро, работа со строкой... а Str - это функция паскаля? мне б желательно чтобы процедурка быстро работала, п.ч. нужна для прорисовки графики, может с командами shr и shl кто че посоветует?
|
11.10.2008, 22:03 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
а если так:
Код:
|
11.10.2008, 22:31 | #5 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
о, вот это уже интереснее, кажется работает.. только есть проблемка с пониманием: and сравнивает побитово, как в асме? и что он дает в результате?
|
12.10.2008, 01:11 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
гм. А мне казалось, что это очевидно...
в данном случае к одному байту производится операция логического И с другим байтом (сама операция разумеется битовая). В качестве байта второго берём маску (имя массива смотри :-) (0-й бит - маска 1 : XXXXXXXX and 00000001 1-й бит - маска 2: XXXXXXXX and 00000010 и т.д. 7-й бит маска 128: XXXXXXXX and 10000000) разумеется, маску можно получать сдвигом 1 влево на N-1 позиций... возможно, что это будет даже быстрее, чем брать маску из массива... Полученное число (после логического И) сравниваем - если = 0 значит требуемый бит был нулевой, иначе, бит не нулевой. |
12.10.2008, 11:59 | #7 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Все ясно, просто не знала, что в паскале тоже есть побитовый and, в этом наверно и была проблема. Прописала сдвиг единицы вместо маски, теперь все отлично работает, как раз то, что нужно. Спасибо огромное.
|
12.10.2008, 16:24 | #8 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Asm
Цитата:
Pascal + ассемблер Код:
Код:
|
|
13.10.2008, 19:43 | #9 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Somebody,
Вот такая вещь shl ax, cl у меня не компилируется. Ну ее конечно циклом можно заменить. Или чето в настройках покрутить? Пускай уж будет на паскале в 3 строчки, не намного медленнее) И еще - что такое нормальный ассемблер? |
13.10.2008, 23:12 | #10 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Странно, у меня компилируется. TP70
Я имел в виду ассемблер, который понимает инструкции не только 286-го процессора, но и более современных (в данном случае 386). |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выделить Диапозон | Rom1k06 | Microsoft Office Excel | 4 | 01.09.2008 22:18 |
Выделить выходные | gavrylyuk | Microsoft Office Excel | 5 | 01.08.2008 13:28 |
1 байт 9 бит ?! | Иллидан | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 13.04.2008 12:47 |
Выделить страницу | StasSv | Microsoft Office Excel | 7 | 28.02.2008 10:34 |
выделить строки | Romuald | Microsoft Office Excel | 7 | 22.02.2008 04:58 |