![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
![]()
Задача такая: нужно выделить бит в байте, то есть написать функцию, которая выдает значение истина, если n-ый бит (считая "справа" с 0) в байте равен 1, и ложь - если равен нулю.
function Bit1(bt,n:byte):boolean; написала че-то на ассемблере, но как-то на удивление громоздко получилось, может кто подскажет как это сделать на паскале? |
![]() |
![]() |
![]() |
#2 |
Андрей
Форумчанин
Регистрация: 21.11.2006
Сообщений: 457
|
![]() Код:
ICQ: 5311314
[SIGPIC][/SIGPIC] |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
![]()
тоже не очень быстро, работа со строкой... а Str - это функция паскаля? мне б желательно чтобы процедурка быстро работала, п.ч. нужна для прорисовки графики, может с командами shr и shl кто че посоветует?
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
а если так:
Код:
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
![]()
о, вот это уже интереснее, кажется работает.. только есть проблемка с пониманием: and сравнивает побитово, как в асме? и что он дает в результате?
|
![]() |
![]() |
![]() |
#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 значит требуемый бит был нулевой, иначе, бит не нулевой. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
![]()
Все ясно, просто не знала, что в паскале тоже есть побитовый and, в этом наверно и была проблема. Прописала сдвиг единицы вместо маски, теперь все отлично работает, как раз то, что нужно. Спасибо огромное.
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]() Цитата:
Pascal + ассемблер Код:
Код:
|
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
![]()
Somebody,
Вот такая вещь shl ax, cl у меня не компилируется. Ну ее конечно циклом можно заменить. Или чето в настройках покрутить? Пускай уж будет на паскале в 3 строчки, не намного медленнее) И еще - что такое нормальный ассемблер? |
![]() |
![]() |
![]() |
#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 |