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