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

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

Биты


Dmk ©   (2016-03-04 10:49:00) 

Всем привет! Интересный момент получается. Есть исходный адрес + строка битов длиной 310 байт. Это 2480 бит. Как корректно вычислить в каком байте находится последний бит? Вычисляю так: Смещение := (x shr 3). Получается 310 байт, а если 2479 поделить на 8, то смещение получается 309 байтов, а биты находятся в одном и том же байте, соседние. Как быть? Не вычитать же из смещения единицу, ведь в нулевом байте это будет минус и случится AV. Ведь корректное смещение все еще остается 309, т.к. отсчет начинается с нуля - 0..309, а 310 - фактически 311-й байт следующей строки.


Sha   (2016-03-04 16:30:00) [1]

если i=0..2479,
то маска для i-того бита = 1 shl (i and 7) and a[i shr 3]


Dmk   (2016-03-04 11:58:00) [2]

Теперь корректно: Смещение := ((x - 1) mod 8); И позиция в байте := 7 - ((x - 1) mod 8).


Dmk   (2016-03-04 11:55:00) [3]

В моем случае бит был 2480-й в диапазоне 1..2480, а на самом деле он 2479-й в диапазоне 0..2479.


Dmk   (2016-03-04 11:55:00) [4]

Поэтому он и лез в следующий байт ;)


han_malign   (2016-03-04 11:52:00) [5]

> //в слове класс два с


Dmk   (2016-03-04 11:52:00) [6]

>han_malign ©   (04.03.16 11:50) [4]
Уже. Надо считать 0..15, а в моем случае было 1..16. Тогда бит переползал в следующий байт.


Dmk   (2016-03-04 11:51:00) [7]

Да все, разобрался. Некорректно X вычислял. Надо (X - 1), т.е. коррекция на ноль. Тогда точно байт вычисляется.


han_malign   (2016-03-04 11:50:00) [8]

мастер-клас
Проверь свои умозаключения на модели 2-байта = 16 бит.
Затем преврати 2/16 в n/n*8 - и поверь, что при n=310 - всё будет работать абсолютно точно так же...


Dmk   (2016-03-04 11:39:00) [9]

>У тебя строка из не целого количества байт что ли состоит? Что это вообще такое?
Просто битовое изображение BPP = 1.


DVM   (2016-03-04 11:31:00) [10]


> У тебя строка из не целого количества байт что ли состоит?

Это я к тому, зачем вообще писать что в ней столько то БИТ.


DVM   (2016-03-04 11:30:00) [11]


> строка битов длиной 310 байт

У тебя строка из не целого количества байт что ли состоит? Что это вообще такое?
Если же строка (массив) состоит как у нормальных людей из целого количества байт, то очевидно последний бит находится в последнем байте.


Наверх

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