Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить один бит в байте ? [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 и его реализацию.


Наверх

Титульная страница Поиск, карта сайта Написать письмо