Delphi按位运算问题

时间:2010-11-17 05:34:25

标签: delphi bit-manipulation

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,

procedure setBit(a,b:Integer);

2 个答案:

答案 0 :(得分:1)

我猜您使用的是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;

它将改变dest指向的8字节值,将数据存储到前5个字节中。

答案 1 :(得分:1)

设置位的最简单方法是使用汇编程序指令BTS。类似的东西(未经测试)

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

应该有效。见http://www.intel.com/Assets/PDF/manual/253666.pdf