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

Вниз

Как скопировать биты от k до n?   Найти похожие ветки 

 
NikNet ©   (2005-08-21 14:48) [0]

Есть число 9834989832 мне надо из определенной позиций
скопировать до определенной.  Например  от 3 до 8
а также в обратную сторону. Например от 8 до 3.

Помогите реализовать такие ф-ций? Я не умею работать с битами :(


 
Alexander Panov ©   (2005-08-21 15:04) [1]

Наыерное надо учебники почитать?


 
Alexander Panov ©   (2005-08-21 15:05) [2]

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


 
Alexander Panov ©   (2005-08-21 15:06) [3]

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


 
Alexander Panov ©   (2005-08-21 15:06) [4]

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


 
Alexander Panov ©   (2005-08-21 15:07) [5]

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


 
Джо ©   (2005-08-21 15:36) [6]

Автомодератор вернулся? ;)


 
Юрий Зотов ©   (2005-08-21 15:41) [7]

> 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-й - что и требовалось.


 
Anatoly Podgoretsky ©   (2005-08-21 16:18) [8]

Джо ©   (21.08.05 15:36) [6]
Если бы :-)


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

>>Как видим, в результате мы выделили из числа X биты с 3-го по 8-й - что и требовалось.
Функция установлен ли бит (номер бита с конца)

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


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



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1124285334
Rule
2005-08-17 17:28
2005.10.02
Возоможно ли работа БД в MSSQL 2000 без лога транзакций


1-1126085925
Санек
2005-09-07 13:38
2005.10.02
TreeView с CheckBox ами где брать картинки???


1-1125900752
kMax
2005-09-05 10:12
2005.10.02
Скопировать файл с заменой


14-1125595655
Копир
2005-09-01 21:27
2005.10.02
Лимонов - это Томазо Кампанелла.


14-1126640182
Piter
2005-09-13 23:36
2005.10.02
Подскажите про собаку...