Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
15-1278448186
Юрий
2010-07-07 00:29
2010.10.03
С днем рождения ! 7 июля 2010 среда


2-1278083537
AKE
2010-07-02 19:12
2010.10.03
Как скопировать один массив массивов в другой?


2-1278810092
defen
2010-07-11 05:01
2010.10.03
объединение приложения и сервиса


15-1278188988
Юрий
2010-07-04 00:29
2010.10.03
С днем рождения ! 4 июля 2010 воскресенье


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский