Значит есть b:byte; Как установить n-й бит в значение х ?
Либо какими командами ассемблера это можно сделать ?
asm ??? ??? end;
Автор: мисс_граффити 13.04.2007 22:38
asm mov AL,f or c,AL end;
asm mov AL,f and c,AL end;
смотря чему равен х...
то есть, например, 110 and 011 даст 010 (установили первый бит в 0) 001 or 101 даст 101 (установили первый в 1)
Автор: hardcase 13.04.2007 22:49
Цитата(Scorp_Freeman @ 13.04.2007 19:18)
Как установить n-й бит в значение х ?
x := x or (1 shl n);
Автор: Scorp_Freeman 13.04.2007 22:53
Цитата
смотря чему равен х...
чему он будет равняться я не знаю, он будет постоянно меняться, а также номер бита который надо будет устанавливать также будет меняться.
Мне нужно будет в байт к примеру ???????? на место второго бита поставить сооветствующий бит другого байта 000000?0. Если бы у меня второй байт был 111111?1 я бы просто использовал AND (
Автор: hardcase 13.04.2007 22:57
Цитата(Scorp_Freeman @ 13.04.2007 19:53)
чему он будет равняться я не знаю, он будет постоянно меняться, а также номер бита который надо будет устанавливать также будет меняться.
Мне нужно будет в байт к примеру ???????? на место второго бита поставить сооветствующий бит другого байта 000000?0. Если бы у меня второй байт был 111111?1 я бы просто использовал AND (
b1 := b1 or (b2 and (1 shl n))
добавил: у меня биты нумеруются с нуля.
Автор: Scorp_Freeman 13.04.2007 22:59
Цитата
Как установить n-й бит в значение х ?
Извените, я кажется ошибся в формулировке вопроса) "Установить" не в смысле записать 1 а поместить туда значение бита(0 либо 1)
Автор: hardcase 13.04.2007 23:01
Цитата(Scorp_Freeman @ 13.04.2007 19:59)
Извените, я кажется ошибся в формулировке вопроса) "Установить" не в смысле записать 1 а поместить туда значение бита(0 либо 1)
Однако переклинило......
mask := (1 shl n); bit := (b2 and mask); if( boolean(bit) ) then b1 := b1 or mask; else b1 := b1 and not mask;
Автор: hiv 13.04.2007 23:03
Цитата(hardcase @ 13.04.2007 19:57)
у меня биты нумеруются с нуля.
И у меня с нуля
procedure changebit(var x:byte;n:byte;bit:byte); begin if bit=0 then x:=x and (not(1 shl n)) else x:=x or (1 shl n) end;
var bb:byte;
begin bb:=133; changebit(bb,2,0); writeln(ord(bb)); end.
x - исходная переменная n - номер бита bit - во что устанавливаем 0 / 1
Автор: Scorp_Freeman 13.04.2007 23:04
Цитата(hardcase @ 13.04.2007 18:57)
b1 := b1 or (b2 and (1 shl n))
если так написать,как мне кажется, то тогда в первом байте изменяется не только тот бит который мне надо, а и другие , значение которых должно быть неизменным
Автор: мисс_граффити 13.04.2007 23:05
сорри... не удержалась.
bit:byte
Автор: hardcase 13.04.2007 23:10
Нда пока редактил решение, тут уже всё ответили =))