Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите узнать какие биты, выловлены, а какие нет?


Страницы:   1 2

NikNet ©   (2005-08-21 13:40:00) 

Помогите узнать какие биты, выловлены, а  какие нет?

Например, скопировать узнать 0..7 из  WORD и т. д.
Может, есть готовая ф-ция?


Германн   (2005-08-23 03:02:00) [1]

Имхо, может я и не прав, но позволю себе напомнить о "Помогите узнать какие биты, выловлены, а какие нет" с помощью конструкции Set
Если только номер бита не вылазит за 32! А по сабжу -  Нет!
Тогда, имхо, лучше описать свой тип - Set! И проверять вхождение в него.


Defunct   (2005-08-22 19:49:00) [2]

begin...end ©   (22.08.05 19:40) [22]

Удобство заключается в использования номера бита в отличие от [3] (вы наверняка заметили, что пост [5] появился до поста [9]). А преимущество посравнению с shr [9] в скорости исполнения.


begin...end   (2005-08-22 19:40:00) [3]

> Defunct ©   (22.08.05 19:33) [21]

А в чём удобствоспособа [5]? Гораздо удобнее, по-моему, обычный shl/and или [9]. Хотя это и будет несколько медленнее работать.


Defunct   (2005-08-22 19:33:00) [4]

begin...end ©   (22.08.05 19:24) [20]

А оно надо брасаться такими фразами: [8]
их весьма неприятно читать.


begin...end   (2005-08-22 19:24:00) [5]

> Defunct ©   (22.08.05 19:16) [18]

Ну откомпилируется, но с warning'ом. А оно надо?


vrem   (2005-08-22 19:17:00) [6]

[16] begin...end ©   (22.08.05 19:14)
а если использовать отрицательное integer, что бы по битам совпало с $80000000 ?


Defunct   (2005-08-22 19:16:00) [7]

begin...end ©   (22.08.05 19:14) [16]

> Нет, я считаю, что объявление массива mskAnd из [5] не откомпилируется

ты ошибаешься.


Defunct   (2005-08-22 19:16:00) [8]

> begin...end

<> вместо >


begin...end   (2005-08-22 19:14:00) [9]

> Defunct ©   (22.08.05 19:10) [15]

Нет, я считаю, что объявление массива mskAnd из [5] не откомпилируется, по крайней мере, до тех пор, пока из списка его элементов не убрать $80000000, или не изменить тип на четырёхбайтовый беззнаковый.

Что ж, Вам никто не мешает убедиться в этом самостоятельно.


Defunct   (2005-08-22 19:10:00) [10]

begin...end ©   (22.08.05 19:04) [14]

А ты об этом, т.е. ты считаешь что знаковый разряд не будет работать. Что ж тебе никто не мешает убедиться в обратном.


begin...end   (2005-08-22 19:04:00) [11]

> Defunct ©   (22.08.05 18:58) [13]

> Каких?

Диапазона значений типа Integer.


Defunct   (2005-08-22 18:58:00) [12]

Удалено модератором


begin...end   (2005-08-22 17:22:00) [13]

Удалено модератором


Defunct   (2005-08-22 16:42:00) [14]

Удалено модератором


Германн   (2005-08-22 16:00:00) [15]

2 Defunct ©   (22.08.05 04:03) [7]
 > в delphi нет test.

Test нет, зато есть in


tesseract   (2005-08-22 09:38:00) [16]

По мне так проще:

Функция установлен ли бит (номер бита с конца)

Function IsBitSet(value:cardinal; bitno:byte):boolean;
begin
result:=odd(value shr bitno);
end;

перефазировка на номер бита от начала делается так
BitFirst:=SizeOF(cardinal)-bitno;


begin...end   (2005-08-22 08:16:00) [17]

> Defunct ©   (21.08.05 20:50) [5]

> так imho удобнее: ...

Так не может быть удобнее, потому что так даже не откомпилируется.


Defunct   (2005-08-22 04:03:00) [18]

Германн ©   (22.08.05 03:41) [6]

в delphi нет test.


Германн   (2005-08-22 03:41:00) [19]

Не снимая вопроса

"Anatoly Podgoretsky ©   (21.08.05 13:43) [1]"
"Кто выловил и как выловил."

позвольте возразить, что TEST - быстрее AND!


Defunct   (2005-08-21 20:50:00) [20]

KilkennyCat ©   (21.08.05 17:17) [3]

Это сложно ;)
надо всегда помнить степени двойки ;>

так imho удобнее:

const
 mskAnd : array[0..31] of integer =
    (1, 2, 4, 8, 16 ...., $80000000);
 mskOr  : array[0..31] of integer =
    ($FFFFFFFE, $FFFFFFFD, ...., $7FFFFFFF );

function GetBit(const Num, Slovo : integer):boolean;
begin
 Result := Slovo and mskAnd[ Num ] > 0;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо