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

Вниз

Установить группу битов числа   Найти похожие ветки 

 
Виталий ©   (2010-07-09 10:46) [0]

Из уроков на "Королевстве Дельфи"  знаю, что установить бит числа - это
t := t or (1 shl N), где N - номер бита
А как установить группу битов, например, 4 старших? Интересно именно через сдвиговые операции, а не просто маской вроде t := t or mask


 
Плохиш ©   (2010-07-09 10:50) [1]


> t := t or (1 shl N)


> а не просто маской вроде t := t or mask

Мая плякать...

PS. mask = (1 shl N)


 
Плохиш ©   (2010-07-09 10:51) [2]


> t := t or ($f shl N), где N - номер младшего бита


 
Anatoly Podgoretsky ©   (2010-07-09 11:56) [3]

А кроме OR MASK других вариантов не существует. Маску можно собирать из любого количества бит/флагов
(1 shl N1) + (1 shl N2), это не требует никакой вычислительной мощности.


 
Виталий ©   (2010-07-09 12:26) [4]


> Мая плякать...
>
> PS. mask = (1 shl N)

Бред же. Внимательно прочтите, о чем я.
Анатолий, ясно, спасибо. Ваш урок, кстати, по-моему :)


 
Плохиш ©   (2010-07-09 12:48) [5]


> Виталий ©   (09.07.10 12:26) [4]


> Бред же.

Действительно, и зачем ты бред пишешь?


 
Виталий ©   (2010-07-09 21:30) [6]

Можете указать, в каком месте я написал бред?


 
Sha ©   (2010-07-10 00:33) [7]

> Виталий
> Интересно именно через сдвиговые операции,
> а не просто маской вроде t := t or mask

При помощи сдвига значения переменной невозможно установить бит,
не затронув другие биты. Они при сдвиге могут измениться.

Поэтому при помощи сдвигов и других операций формируют маску,
а затем ее OR"ят со значением переменной. Это гарантированно
устанавливает бит(ы) переменной независимо от ее прежнего значения.

Твой пример
t := t or (1 shl N);
эквивалентен
mask := (1 shl N);
t := t or mask;


Об этом тебе и писали
Плохиш ©   (09.07.10 10:50) [1]
Anatoly Podgoretsky ©   (09.07.10 11:56) [3]


 
Германн ©   (2010-07-10 00:42) [8]


> Виталий ©   (09.07.10 10:46)
>
> Из уроков на "Королевстве Дельфи"  знаю, что установить
> бит числа - это
> t := t or (1 shl N), где N - номер бита

И кстати не надо клеветать на уроки АП на Королевстве.
Там четко написано:
"Установка бита

Для установки отдельного бита или группы битов используется операция ИЛИ"


 
Германн ©   (2010-07-10 01:50) [9]


> Anatoly Podgoretsky ©   (09.07.10 11:56) [3]

Послал в лицей своё замечание по этому вопросу.


 
Anatoly Podgoretsky ©   (2010-07-10 10:55) [10]

> Германн  (10.07.2010 01:50:09)  [9]

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


 
Виталий ©   (2010-07-10 12:39) [11]


> Твой пример
> t := t or (1 shl N);
> эквивалентен
> mask := (1 shl N);
> t := t or mask;

Спасибо, Капитан. Просто под словом mask я для простоты имел ввиду отличие маски типа 11000000 от 0000010, то есть когда установленых бит явно больше одного.

> И кстати не надо клеветать на уроки АП на Королевстве.

Не понял Вас, в чем я клевещу. Что не так?


 
Германн ©   (2010-07-11 02:09) [12]


> Не понял Вас, в чем я клевещу. Что не так?

В том что из урока ты вывел, что операции сдвига являются главным способом установки бит в числе! И попросил способ "именно через сдвиговые операции, а не просто маской вроде t := t or mask"
А урок говорит, что главным способом является логическая операция ИЛИ.


 
Германн ©   (2010-07-11 03:33) [13]


> Anatoly Podgoretsky ©   (10.07.10 10:55) [10]
>
> > Германн  (10.07.2010 01:50:09)  [9]
>
> Так я лицей не редактирую и вообще не возвращаюсь к старым
> задач, какие бы
> там не были ошибки. А оповещение я получил по почте.
>

Дык я и не просил (тем более не требовал) что-то изменить.
Надеюсь моё замечание кому-то поможет. Оно ведь там записано.


 
Anatoly Podgoretsky ©   (2010-07-11 10:27) [14]

> Германн  (11.07.2010 03:33:13)  [13]

Это да, ведь оно не у меня записано.


 
Виталий ©   (2010-07-11 21:56) [15]


> В том что из урока ты вывел, что операции сдвига являются
> главным способом установки бит в числе

ничего подобного я не выводил. Я лишь задал вопрос.


 
Германн ©   (2010-07-11 22:21) [16]


> Я лишь задал вопрос.

Да. Но как задал?
> Интересно именно через сдвиговые операции, а не просто маской
> вроде t := t or mask
>


 
Sha ©   (2010-07-11 22:42) [17]

Тема сдвига масок не раскрыта.


 
Германн ©   (2010-07-12 01:32) [18]


> Тема сдвига масок не раскрыта

Бо такой темы в природе не существует, если речь идет об установке бита/битов.
Просто в неизвестно откуда взявшемся примере "установки бита" фигурирует совершенно неестественная для реальных задач функция
function SetBit(Src: Integer; bit: Integer): Integer;
begin
 Result := Src or (1 shl Bit);
end;

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


 
Sha ©   (2010-07-12 09:17) [19]

>> Тема сдвига масок не раскрыта

> Бо такой темы в природе не существует,

По словам автора ему в отдельности ясны тема сдвига и тема масок,
но какая-то их комбинация ему все же не ясна.
Предположил, что это тема сдвига масок.
Если предположение ошибочно, тогда это точно тема маски сдвига.


 
Виталий ©   (2010-07-12 10:06) [20]


> Да. Но как задал?

Как получилось, так и задал. Не понимаю сути ваших обвинений. Или это такой толстый троллинг?
Теперь, однако, я для себя этот момент уяснил. И ни на кого я не клеветал, хватит меня обвинять.


 
han_malign   (2010-07-12 17:49) [21]

highNbitsMask:= not(LongWord(-1) shr N); //or Word, or Byte
lowMbitsMask:=  not(LongWord(-1) shl M);
middleBitsMask:= highNbitsMask and lowNbitsMask; //N+M > sizeof(TTargetType)*8


 
han_malign   (2010-07-12 18:03) [22]

до кучи, зарядка для ума - побайтовое сложение, по модулю 256:
dwAB:= ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F) + (dwB and $7F7F7F7F));


 
Демо ©   (2010-07-13 00:43) [23]


> dwAB:= ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F)
> + (dwB and $7F7F7F7F));


Жуть.


 
Виталий ©   (2010-07-13 01:26) [24]


> ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F) +
> (dwB and $7F7F7F7F));

а "раскрутить" можете - что за маски страшные такие?)


 
Германн ©   (2010-07-13 02:45) [25]


> И ни на кого я не клеветал, хватит меня обвинять.

Делать мне более нечего, кроме как обвинять кого-то кого я не знаю.
Но
> Как получилось, так и задал.

Плохо получилось. Но это не беда.

> а "раскрутить" можете - что за маски страшные такие?

Можно и "раскрутить". Но тогда не интересно будет. Кому интересно разъяснение фокуса?


 
Anatoly Podgoretsky ©   (2010-07-13 08:47) [26]

> Германн  (13.07.2010 02:45:25)  [25]

Маски это просто. Это всего лишь набор бит, где 0 маскирует бит


 
Sha ©   (2010-07-13 09:08) [27]

> а "раскрутить" можете - что за маски страшные такие?)

Правильный вопрос другой:

почему не произойдет побайтного сложения,
если просто сложить dwA+dwB ?



Страницы: 1 вся ветка

Текущий архив: 2010.10.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
2-1278996425
azamatufa
2010-07-13 08:47
2010.10.03
Подскажите как правильно выводить отчет в Word


2-1278329492
Egoor
2010-07-05 15:31
2010.10.03
Условие на расширение открываемого файла


2-1279004324
бумбум
2010-07-13 10:58
2010.10.03
Русские буквы в PDF


2-1278168130
Morsik
2010-07-03 18:42
2010.10.03
Как на delphi сделать при сохранении форматы?


2-1278922587
JohnKorsh
2010-07-12 12:16
2010.10.03
Печать форм.