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

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

Помогитес двоичным числом разобраться


Страницы:   1 2

Kolan ©   (2004-12-11 16:14:00) 

Здравствуйте,
 Задеча:
Есть 28 разрядное двоичное число. Это число задает 4 байта. Прервый 00llllll второй llllllll третий 00hhhhhh четвертый hhhhhhhh. Как из этого числа эти байты вычеслить. Формула?
Если не понятно то например(два байта):
Hbits := Value div 4;
 if Hbits < 1 then
   Hbits := 1;
 Lbits := Value - Hbits * 4;

Value это десятичное число. В итоге имею 2 байта.


begin...end   (2004-12-11 20:19:00) [21]

> [9] uny ©   (11.12.04 19:52)

Что-что?


uny   (2004-12-11 19:52:00) [22]

...а кто по площадям...


begin...end   (2004-12-11 19:22:00) [23]

> [7] cyborg ©   (11.12.04 19:07)

Ну, во-первых, ему, насколько я понял, нужны не биты, а байты.

А во-вторых, непонятно, зачем использовать для хранения значения 1 бита целых 4 байта.


cyborg   (2004-12-11 19:07:00) [24]

Что-то типа этого?

Function GetBit(Var bytes : cardinal; num : byte) : cardinal;
begin
Result:=(bytes shr (num-1)) and 1;
end;

bytes - твои биты в 32 битовом числе, num - номер бита справа.
возвращает 1 или 0;


begin...end   (2004-12-11 18:19:00) [25]

> Kolan ©   (11.12.04 16:14)

Что-то Вы молчите, так что буду разговаривать сам с собой.

Есть очень простой способ решения:

var
 Parts: array [0..3] of Byte;
 Value: Cardinal absolute Parts;

begin
 // Присваиваем значение переменной Value
 // Работаем с каждым её байтом в отдельности как с элементом массива Parts
end.


> Если не понятно то например(два байта):
> Hbits := Value div 4;
>  if Hbits < 1 then
>    Hbits := 1;
>  Lbits := Value - Hbits * 4;
> Value это десятичное число. В итоге имею 2 байта.

А здесь можно было, кроме способа, описанного выше, использовать стандартные функции Lo и Hi, т.к. байта всего 2.

Ну и, наконец, можно с помощью сдвигов и масок.


uny   (2004-12-11 17:22:00) [26]

[4] наверно из 32 4 не используются:)))


begin...end   (2004-12-11 17:15:00) [27]

> Kolan ©   (11.12.04 16:14)

> Есть 28разрядное двоичное число. Это число задает 4байта.

Это как?


GanibalLector   (2004-12-11 16:52:00) [28]

> hhhhhhhh
Это как понять? В двоичной системе либо "0" либо "1".А то ШО?


uny   (2004-12-11 16:39:00) [29]

[1] забыл - если байт не нулевой, то нужно так или иначе сдвинуть к нулевой позиции. т.е. по формуле получили число для первого(не нулевого) байта - нужно это число разделить на 2 в степени 8


uny   (2004-12-11 16:35:00) [30]

взять калькулятор - в виндовсе, переключить его в битовый режим и забить нужный байт единицами.
т.е. если нужен нулевой байт , то забить 8 единиц
если нужен первый, то  1111111100000000
вот, переключить калькулятор в десятичный вид и прочитать число.
а в своей проге написать
нужный байт:=(число содержащее все 4 байта) and (полученное в калькуляторе число);


Страницы:   1 2

Наверх

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