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

> ВНИМАНИЕ!

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

> Битовые операции
Scorp_Freeman
сообщение 13.04.2007 18:18
Сообщение #1


Пионер
**

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

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


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

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

asm
???
???
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
мисс_граффити
сообщение 13.04.2007 18:38
Сообщение #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 
 К началу страницы 
+ Ответить 
Scorp_Freeman
сообщение 13.04.2007 18:53
Сообщение #3


Пионер
**

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

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


Цитата

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



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

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


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 - 13.04.2007 18:58


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


Профи
****

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 9.07.2025 19:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"