![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скопировать биты от k до n? [D6]
NikNet © (2005-08-21 14:48:00)Есть число 9834989832 мне надо из определенной позиций
скопировать до определенной. Например от 3 до 8
а также в обратную сторону. Например от 8 до 3.
Помогите реализовать такие ф-ций? Я не умею работать с битами :(
tesseract (2005-08-22 09:37:00) [1]>>Как видим, в результате мы выделили из числа X биты с 3-го по 8-й - что и требовалось.
Функция установлен ли бит (номер бита с конца)
Function IsBitSet(value:cardinal; bitno:byte):boolean;
begin
result:=odd(value shr bitno);
end;
перефазировка на номер бита от начала делается так
BitFirst:=SizeOF(cardinal)-bitno;
Anatoly Podgoretsky (2005-08-21 16:18:00) [2]Джо © (21.08.05 15:36) [6]
Если бы :-)
Юрий Зотов (2005-08-21 15:41:00) [3]> NikNet © (21.08.05 14:48)
Битовые операции основаны на логической (булевой) арифметике. Вот ее основные правила (буква b означает любое значение бита, хоть 0, хоть 1).
b and 0 = 0
b and 1 = b
b or 0 = b
b or 1 = 1
not 0 = 1
not 1 = 0
b xor b = 0
b xor (not b) = 1
Эти правила надо знать наизусть . Еще надо знать, что биты нумеруются от 0 и начиная с младшего.
Итак, нам надо выделить из числа X биты с 3-го по 8-й. Сразу видим, что число X должно занимать не менее 2-х байт, иначе никакого 8-го бита в нем просто не будет. ОК, тогда составим двухбайтовое двоичное число (так называемую маску), в котором биты с 3-го по 8-й равны единице (установлены), а остальные равны нулю (сброшены). Получим 0000000111111000 (а в шестнадцатиричном виде это будет $01F8).
Пусть значение X равно bbbbbbbbbbbbbbbb. Что будет, если произвести операцию AND между этим числом и нашей маской? Давайте посмотрим:
bbbbbbbbbbbbbbbb
and
0000000111111000
=
0000000bbbbbb000
Как видим, в результате мы выделили из числа X биты с 3-го по 8-й - что и требовалось.
Джо (2005-08-21 15:36:00) [4]Автомодератор вернулся? ;)
Alexander Panov (2005-08-21 15:07:00) [5]Удалено модератором
Alexander Panov (2005-08-21 15:06:00) [6]Удалено модератором
Alexander Panov (2005-08-21 15:06:00) [7]Удалено модератором
Alexander Panov (2005-08-21 15:05:00) [8]Удалено модератором
Alexander Panov (2005-08-21 15:04:00) [9]Наыерное надо учебники почитать?