だから私は、例えば2バイトで、持っている:13、61デルファイで2バイトを1つの16ビット数に変換するには?
を、私は16ビットに変換したい:3389
は今、私は、関数を使用しています:
function IntPower(const N, k: integer): integer;
var
i: Integer;
begin
Result:= (256 * N) + k;
end;
を
Delphiでこれを行うより良い方法はありますか?
だから私は、例えば2バイトで、持っている:13、61デルファイで2バイトを1つの16ビット数に変換するには?
を、私は16ビットに変換したい:3389
は今、私は、関数を使用しています:
function IntPower(const N, k: integer): integer;
var
i: Integer;
begin
Result:= (256 * N) + k;
end;
を
Delphiでこれを行うより良い方法はありますか?
です。あなたは代わりにシフト演算を使用することができます。
または
Result := N shl 8 or k;
のいずれかが正常に動作し、あなたが好む方選ぶ必要があります。
二つの代替方法は罰金であること
function CreateWord(const A, B: byte): word;
begin
result := word(A) shl 8 or B;
end;
と
function CreateWord(const A, B: byte): word;
var
WR: WordRec;
begin
WR.Hi := A;
WR.Lo := B;
result := word(WR);
end;
も参照してください。 –
@OndrejKelle:それは引数の順番を除いて私の 'CreateWord'です。私の' CreateWord'はOPの 'IntPower'にマッチします。 –
コードは問題ありません。
N、Kと結果が基数として定義されている場合、コンパイラは実際にはSHL asmオペコードを使用しますが、実際には*よりも高速ではありません - MULは1サイクル演算IIRCです。
function IntPower(const N, k: cardinal): cardinal; inline;
begin
Result:= (256 * N) + k;
end;
はここでメインのトリックは非常に高速なコードを作成しますを定義することです。
N、Kと結果が基数として定義されている場合、コンパイラは実際にはSHL asmオペコードを使用します。 –
実際には、パフォーマンスに目立つ違いはありませんが、整数の乗算は高速です –