3

乗算を行わずに (シフトなどを使用して)、レジスタに格納されている数値 (eax など) を 2 乗することは可能ですか? 32 ビットのアセンブリで 16 ビットの数値を 2 乗するので、オーバーフローは問題になりません。NASM x86 アセンブリを使用してプログラムを作成しています。よろしくお願いします。

4

3 に答える 3

5

C:

int square(int n) {
    int i, r = 0;
    for (i = n; i; i >>= 1, n <<= 1)
        if (i & 1)
            r += n;
    return r;
}

NASMはあなたに任せます。

于 2010-04-11T01:36:04.033 に答える
3

シフトと加算は、乗算命令を使用せずにコンピューターで乗算を行うための出発点として常に適しています。

テーブルの事前計算は、この問題に適した別のオプションです。

于 2010-04-11T01:31:24.590 に答える
0

少し遅い答え。ロジックは次のとおりです。- N の 2 乗は、最初の N 個の奇数を加算することによって取得できます。

Cでは、

int sqr(int num){
    int j=1; 
    int sum=0;
    while(num>0){
        sum += j;
        j += 2; 
        num--;
    }
    return sum;
 }

ただし、整数にのみ適用されます。

于 2013-08-26T15:30:45.503 に答える