2012年6月6日

指定されたビットを交換する

整数型の値の指定された任意の2つのビットを交換する方法。
function ExchangeBits(Value: Integer; Pos1: Integer; Pos2: Integer): Integer;
var
  n: Integer;
  t: Integer;
begin

  Result := Value;

  n := Pos1 - Pos2;
  if n = 0 then
  begin
    Exit;
  end;
  if n < 0 then
  begin
    Pos2 := Pos1;
    n := -n;
  end;

  t := ((Value shr n) xor Value) and (1 shl Pos2);
  Result := Result xor t;
  Result := Result xor (t shl n);

end;
元ねたはびびすけさんのビット交換 (RunRunDietOnline)。昔からある(バッド)ノウハウのひとつであるXORによる値の交換の応用ですね。

0 件のコメント: