Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.13;
Скачать: CL | DM;

Вниз

Как изменить один бит в байте ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1197366639
Dennis I. Komarov
2007-12-11 12:50
2008.01.13
ICS


2-1197453836
Alexandr Malygin
2007-12-12 13:03
2008.01.13
Tcaption и Char


4-1182157169
SkySat
2007-06-18 12:59
2008.01.13
Выбор папки


2-1197814557
Stepper
2007-12-16 17:15
2008.01.13
Как подсчитать кол-во символов введенных в TEdit ?


2-1197720419
niKo
2007-12-15 15:06
2008.01.13
Linux