Форум: "Начинающим";
Текущий архив: 2010.10.03;
Скачать: [xml.tar.bz2];
ВнизУстановить группу битов числа Найти похожие ветки
← →
Виталий © (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.003 c