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