IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Битовые операции
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Значит есть b:byte;
Как установить n-й бит в значение х ?

Либо какими командами ассемблера это можно сделать ?

asm
???
???
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


             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)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Scorp_Freeman @ 13.04.2007 19:18) *
Как установить n-й бит в значение х ?

x := x or (1 shl n);


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата

смотря чему равен х...



чему он будет равняться я не знаю, он будет постоянно меняться, а также номер бита который надо будет устанавливать также будет меняться.

Мне нужно будет в байт к примеру ???????? на место второго бита поставить сооветствующий бит
другого байта 000000?0. Если бы у меня второй байт был 111111?1 я бы просто использовал AND (
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Scorp_Freeman @ 13.04.2007 19:53) *

чему он будет равняться я не знаю, он будет постоянно меняться, а также номер бита который надо будет устанавливать также будет меняться.

Мне нужно будет в байт к примеру ???????? на место второго бита поставить сооветствующий бит
другого байта 000000?0. Если бы у меня второй байт был 111111?1 я бы просто использовал AND (

b1 := b1 or (b2 and (1 shl n))

добавил: у меня биты нумеруются с нуля.

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата

Как установить n-й бит в значение х ?


Извените, я кажется ошибся в формулировке вопроса) "Установить" не в смысле записать 1 а поместить туда значение бита(0 либо 1)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(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;

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(hardcase @ 13.04.2007 19:57) *
у меня биты нумеруются с нуля.
И у меня с нуля lol.gif
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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата(hardcase @ 13.04.2007 18:57) *

b1 := b1 or (b2 and (1 shl n))


если так написать,как мне кажется, то тогда в первом байте изменяется не только тот бит который мне надо, а и другие , значение которых должно быть неизменным
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


сорри... не удержалась.
bit:byte
good.gif


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Нда пока редактил решение, тут уже всё ответили =))


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


спасибо !!! blum.gif раздуплил наконец то ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.11.2020 14:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name