![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установить группу битов числа
Виталий © (2010-07-09 10:46:00)Из уроков на "Королевстве Дельфи" знаю, что установить бит числа - это
t := t or (1 shl N), где N - номер бита
А как установить группубитов, например, 4 старших? Интересно именно через сдвиговые операции, а не просто маской вроде t := t or mask
Sha (2010-07-13 09:08:00) [1]> а "раскрутить" можете - что за маски страшные такие?)
Правильный вопрос другой:
почему не произойдет побайтного сложения,
если просто сложитьdwA+dwB?
Anatoly Podgoretsky (2010-07-13 08:47:00) [2]> Германн (13.07.2010 02:45:25) [25]
Маски это просто. Это всего лишь набор бит, где 0 маскирует бит
Германн (2010-07-13 02:45:00) [3]
> И ни на кого я не клеветал, хватит меня обвинять.
Делать мне более нечего, кроме как обвинять кого-то кого я не знаю.
Но
> Как получилось, так и задал.
Плохо получилось. Но это не беда.
> а "раскрутить" можете - что за маски страшные такие?
Можно и "раскрутить". Но тогда не интересно будет. Кому интересно разъяснение фокуса?
Виталий (2010-07-13 01:26:00) [4]
> ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F) +
> (dwB and $7F7F7F7F));
а "раскрутить" можете - что за маски страшные такие?)
Демо (2010-07-13 00:43:00) [5]
> dwAB:= ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F)
> + (dwB and $7F7F7F7F));
Жуть.
han_malign (2010-07-12 18:03:00) [6]до кучи, зарядка для ума - побайтовое сложение, по модулю 256:
dwAB:= ((dwA xor dwB) and $80808080) xor ((dwA and $7F7F7F7F) + (dwB and $7F7F7F7F));
han_malign (2010-07-12 17:49:00) [7]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
Виталий (2010-07-12 10:06:00) [8]
> Да. Но как задал?
Как получилось, так и задал. Не понимаю сути ваших обвинений. Или это такой толстый троллинг?
Теперь, однако, я для себя этот момент уяснил. И ни на кого я не клеветал, хватит меня обвинять.
Sha (2010-07-12 09:17:00) [9]>> Тема сдвига масок не раскрыта
> Бо такой темы в природе не существует,
По словам автора ему в отдельности ясны тема сдвига и тема масок,
но какая-то их комбинация ему все же не ясна.
Предположил, что это тема сдвига масок.
Если предположение ошибочно, тогда это точно тема маски сдвига.
Германн (2010-07-12 01:32:00) [10]
> Тема сдвига масок не раскрыта
Бо такой темы в природе не существует, если речь идет об установке бита/битов.
Просто в неизвестно откуда взявшемся примере "установки бита" фигурирует совершенно неестественная для реальных задач функция
function SetBit(Src: Integer; bit: Integer): Integer;
begin
Result := Src or (1 shl Bit);
end;
Для учебы она может и подходит, но так сказать в контексте всего учебного курса.
Sha (2010-07-11 22:42:00) [11]Тема сдвига масок не раскрыта.
Германн (2010-07-11 22:21:00) [12]
> Я лишь задал вопрос.
Да. Но как задал?
> Интересно именно через сдвиговые операции, а не просто маской
> вроде t := t or mask
>
Виталий (2010-07-11 21:56:00) [13]
> В том что из урока ты вывел, что операции сдвига являются
> главным способом установки бит в числе
ничего подобного я не выводил. Я лишь задал вопрос.
Anatoly Podgoretsky (2010-07-11 10:27:00) [14]> Германн (11.07.2010 03:33:13) [13]
Это да, ведь оно не у меня записано.
Германн (2010-07-11 03:33:00) [15]
> Anatoly Podgoretsky © (10.07.10 10:55) [10]
>
> > Германн (10.07.2010 01:50:09) [9]
>
> Так я лицей не редактирую и вообще не возвращаюсь к старым
> задач, какие бы
> там не были ошибки. А оповещение я получил по почте.
>
Дык я и не просил (тем более не требовал) что-то изменить.
Надеюсь моё замечание кому-то поможет. Оно ведь там записано.
Германн (2010-07-11 02:09:00) [16]
> Не понял Вас, в чем я клевещу. Что не так?
В том что из урока ты вывел, что операции сдвига являются главным способом установки битв числе! И попросил способ "именно через сдвиговые операции, а не просто маской вроде t := t or mask"
А урок говорит, что главным способом является логическая операция ИЛИ.
Виталий (2010-07-10 12:39:00) [17]
> Твой пример
> t := t or (1 shl N);
> эквивалентен
> mask := (1 shl N);
> t := t or mask;
Спасибо, Капитан. Просто под словом mask я для простоты имел ввиду отличие маски типа 11000000 от 0000010, то есть когда установленых бит явно больше одного.
> И кстати не надо клеветать на уроки АП на Королевстве.
Не понял Вас, в чем я клевещу. Что не так?
Anatoly Podgoretsky (2010-07-10 10:55:00) [18]> Германн (10.07.2010 01:50:09) [9]
Так я лицей не редактирую и вообще не возвращаюсь к старым задач, какие бы
там не были ошибки. А оповещение я получил по почте.
Германн (2010-07-10 01:50:00) [19]
> Anatoly Podgoretsky © (09.07.10 11:56) [3]
Послал в лицей своё замечание по этому вопросу.
Германн (2010-07-10 00:42:00) [20]
> Виталий © (09.07.10 10:46)
>
> Из уроков на "Королевстве Дельфи" знаю, что установить
> бит числа - это
> t := t or (1 shl N), где N - номер бита
И кстати не надо клеветать на уроки АП на Королевстве.
Там четко написано:
"Установка бита
Для установки отдельного бита или группы битов используется операция ИЛИ"