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

Вниз

Биты   Найти похожие ветки 

 
Dmk ©   (2016-03-04 10:49) [0]

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


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


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

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


 
DVM ©   (2016-03-04 11:31) [2]


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

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


 
Dmk ©   (2016-03-04 11:39) [3]

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


 
han_malign ©   (2016-03-04 11:50) [4]

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


 
Dmk ©   (2016-03-04 11:51) [5]

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


 
han_malign ©   (2016-03-04 11:52) [6]

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


 
Dmk ©   (2016-03-04 11:52) [7]

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


 
Dmk ©   (2016-03-04 11:55) [8]

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


 
Dmk ©   (2016-03-04 11:55) [9]

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


 
Dmk ©   (2016-03-04 11:58) [10]

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


 
Sha ©   (2016-03-04 16:30) [11]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1456672132
Макака
2016-02-28 18:08
2018.03.04
Сортировка TList


2-1456839307
Советник
2016-03-01 16:35
2018.03.04
Android vs Win7


2-1456844768
Мишаня
2016-03-01 18:06
2018.03.04
Вопрос по SQL


2-1456753183
gog
2016-02-29 16:39
2018.03.04
Переделать MessageDlg


2-1456752598
Макака
2016-02-29 16:29
2018.03.04
Проверка условий