Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Помогите узнать какие биты, выловлены, а какие нет?   Найти похожие ветки 

 
NikNet ©   (2005-08-21 13:40) [0]

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

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


 
Anatoly Podgoretsky ©   (2005-08-21 13:43) [1]

Кто выловил и как выловил.


 
vrem   (2005-08-21 14:41) [2]

если выловить биты значит сбросить все остальные :)
то = (word) and (число).
число делаешь так - в виндовс калькуляторе переключаешься на "Bin", и набираешь - если бит интересует, то набираешь его 1-й, если не интересует = 0.
согласно [0] интересуют биты 0..7, значит набираешь 8 единиц.
переключаешь калькулятор в "Dec", и читаешь число = 255


 
KilkennyCat ©   (2005-08-21 17:17) [3]

function GetBit(const Slovo : Word; const NBit : Word) : boolean;
begin
 result := Slovo and NBit = NBit;
end;


NBit - число, определяющее номер бита. Например, если хотим выловить 16-ый бит (т.е. номер 15), NBit = 32678


 
KilkennyCat ©   (2005-08-21 17:21) [4]

Не заметил
http://delphimaster.net/view/2-1124621293/&web=1
:)


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

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;


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

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

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

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


 
Defunct ©   (2005-08-22 04:03) [7]

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

в delphi нет test.


 
begin...end ©   (2005-08-22 08:16) [8]

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

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

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


 
tesseract ©   (2005-08-22 09:38) [9]

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

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

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

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


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

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

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


 
Defunct ©   (2005-08-22 16:42) [11]

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


 
begin...end ©   (2005-08-22 17:22) [12]

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


 
Defunct ©   (2005-08-22 18:58) [13]

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


 
begin...end ©   (2005-08-22 19:04) [14]

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

> Каких?

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


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

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

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


 
begin...end ©   (2005-08-22 19:14) [16]

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

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

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


 
Defunct ©   (2005-08-22 19:16) [17]

> begin...end

<> вместо >


 
Defunct ©   (2005-08-22 19:16) [18]

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

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

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


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

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


 
begin...end ©   (2005-08-22 19:24) [20]

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

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


 
Defunct ©   (2005-08-22 19:33) [21]

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

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


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

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

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


 
Defunct ©   (2005-08-22 19:49) [23]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.039 c
2-1124553600
_Anonymous
2005-08-20 20:00
2005.10.02
Простой вопрос TThread


14-1126493590
Ozone
2005-09-12 06:53
2005.10.02
WMA vs ЗВЕЗДА РОССИИ


5-1101107105
kerim
2004-11-22 10:05
2005.10.02
 Регистрация редактора св-в полей


14-1125990160
КаПиБаРа
2005-09-06 11:02
2005.10.02
Какую реакцию вызвал у вас ураган, набедокуривший в США?


14-1126679907
boriskb
2005-09-14 10:38
2005.10.02
Как вам украшения? :)