2017-02-16 7 views

答えて

4

です。あなたは代わりにシフト演算を使用することができます。

または

Result := N shl 8 or k; 

のいずれかが正常に動作し、あなたが好む方選ぶ必要があります。

+0

N、Kと結果が基数として定義されている場合、コンパイラは実際にはSHL asmオペコードを使用します。 –

+0

実際には、パフォーマンスに目立つ違いはありませんが、整数の乗算は高速です –

4

二つの代替方法は罰金であること

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; 
+2

も参照してください。 –

+0

@OndrejKelle:それは引数の順番を除いて私の 'CreateWord'です。私の' CreateWord'はOPの 'IntPower'にマッチします。 –

0

コードは問題ありません。

N、Kと結果が基数として定義されている場合、コンパイラは実際にはSHL asmオペコードを使用しますが、実際には*よりも高速ではありません - MULは1サイクル演算IIRCです。

function IntPower(const N, k: cardinal): cardinal; inline; 
begin 
    Result:= (256 * N) + k; 
end; 

はここでメインのトリックは非常に高速なコードを作成します​​を定義することです。

関連する問題