Вопрос побитовой операции Delphi - PullRequest
0 голосов
/ 17 ноября 2010

F0 7D 00 C8 00 -> 11110000 01111101 00000000 11001000 00000000

Первые 4 бита 1111 = 15 означает, что следующие 30 бит используются для хранения 2 значений, по 15 бит каждое, a = 000001111101000 = 1000, b = 000001100100000 = 800 (значение бит со знаком)

1111000001111101000000001100100000 соединяется с '000000', поэтому будет 5 байтов.

Как сделать такую ​​процедуру delphi для изменения значения a & b,

процедура setBit (a, b: целое число);

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Самый простой способ установить бит - это использовать инструкцию ассемблера BTS. Что-то похожее (не проверено)

procedure SetBit(var L; bit: Longint);
asm
  BTS [EAX], EDX
end;

должно работать. Смотри http://www.intel.com/Assets/PDF/manual/253666.pdf

1 голос
/ 17 ноября 2010

Я полагаю, вы используете порядок хранения LSB.

Попробуйте это:

procedure SetBit(const a,b: cardinal; var dest);
var d: Int64 absolute dest;
begin
  d := $F000000000+(Int64(a) shl 21)+b shl 6;
end;

Он изменит 8-байтовое значение, указанное в dest, сохраняя данные в первые 5 байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...