![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить один бит в байте ? [D7, WinXP]
San1712 © (2007-12-13 20:57:00)Здравствуйте. Как изменить бит в байте ? Буду рад увидеть примеры как на асме так и на делфи.
korneley (2007-12-14 16:27:00) [1]
$2B or not $2B = $FF
(c)
DmT (2007-12-14 15:18:00) [2]Автор, тебе надо тупо инвертить битик или управлять состояние вручную(установить/сбросить)?
Slym (2007-12-14 04:16:00) [3]
function revbit(const i, n: Integer):integer;
asm
BTC EAX, EDX
end;
Slym (2007-12-14 04:15:00) [4]Anatoly Podgoretsky © (14.12.07 0:20) [10]
Ты бы поосторожнее с EBX
эт точно
function revbit(const i: Integer; n: Integer):integer;
asm
BTC EAX, n
end;
var i: Integer;
begin
i := $10000003;
i:=revbit(i, 28);
WriteLn(i); // 3
end.
Anatoly Podgoretsky (2007-12-14 00:20:00) [5]> palva (14.12.2007 00:17:09) [9]
Ты бы поосторожнее с EBX
palva (2007-12-14 00:17:00) [6]Автор просил еще и на ассемблере:
{$APPTYPE CONSOLE}
var
i: Integer;
procedure revbit(var i: Integer; n: Integer);
asm
MOV EBX,i
BTC [EBX], n
end;
begin
i := $10000003;
revbit(i, 28);
WriteLn(i); // 3
end.
Anatoly Podgoretsky (2007-12-14 00:00:00) [7]> Pavia (13.12.2007 23:43:06) [6]
Могут изменить, а могут и нет, XOR обязательно изменит.
Servelat (2007-12-13 23:51:00) [8]> Да вы че? Все три инструкции OR/AND/XOR работают с байтами.
> И могут изменять один бит.
ANDи ORмогут изменить бит, а могут и не изменить, в зависимости от текущего состояния этого бита. А XOR Xгарантированно изменитвсе биты, которые установлены в X. Так как автор хотел изменитьбит, то ему видимо нужен XOR, в противном случае, ему следовало бы спросить как установить или сбросить бит.
Pavia (2007-12-13 23:43:00) [9]
> Никакой иронии, единственно правильный ответ, который действительно
> изменит один бит. В отличии от OR/AND
Да вы че? Все три инструкции OR/AND/XOR работают с байтами. И могут изменять один бит.
Anatoly Podgoretsky (2007-12-13 23:03:00) [10]> Servelat (13.12.2007 22:57:04) [4]
Никакой иронии, единственно правильный ответ, который действительно изменит один бит. В отличии от OR/AND
Servelat (2007-12-13 22:57:00) [11]> [3]
Мне в ваших словах почудилась ирония (=.
Действительно знаком, благодаря вашей странице в том числе. Пользуясь случаем, говорю спасибо.
Anatoly Podgoretsky (2007-12-13 22:30:00) [12]Servelat (13.12.07 21:13) [2]
Молодец, знаком с булевой алгеброй.
Правильный_Вася (2007-12-13 21:13:00) [13]A and B
Servelat (2007-12-13 21:13:00) [14]var
B: Byte;
...
B := B xor 1;
изменили значение младшего бита на противоположное. Подробнее http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html
Также, можно посмотреть стандартный класс TBits и его реализацию.