![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установить группу битов числа
Виталий © (2010-07-09 10:46:00)Из уроков на "Королевстве Дельфи" знаю, что установить бит числа - это
t := t or (1 shl N), где N - номер бита
А как установить группубитов, например, 4 старших? Интересно именно через сдвиговые операции, а не просто маской вроде t := t or mask
Sha (2010-07-10 00:33:00) [21]> Виталий
> Интересно именно через сдвиговые операции,
> а не просто маской вроде 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-09 21:30:00) [22]Можете указать, в каком месте я написал бред?
Плохиш (2010-07-09 12:48:00) [23]
> Виталий © (09.07.10 12:26) [4]
> Бред же.
Действительно, и зачем ты бред пишешь?
Виталий (2010-07-09 12:26:00) [24]
> Мая плякать...
>
> PS. mask = (1 shl N)
Бред же. Внимательно прочтите, о чем я.
Анатолий, ясно, спасибо. Ваш урок, кстати, по-моему :)
Anatoly Podgoretsky (2010-07-09 11:56:00) [25]А кроме OR MASK других вариантов не существует. Маску можно собирать из любого количества бит/флагов
(1 shl N1) + (1 shl N2), это не требует никакой вычислительной мощности.
Плохиш (2010-07-09 10:51:00) [26]
> t := t or ($f shl N), где N - номер младшего бита
Плохиш (2010-07-09 10:50:00) [27]
> t := t or (1 shl N)
> а не просто маской вроде t := t or mask
Мая плякать...
PS. mask = (1 shl N)