Текущий архив: 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.059 c