是否可以在不进行任何乘法(通过使用移位等)的情况下对存储在寄存器中的数字(比如 eax)进行平方?我将在 32 位汇编中对 16 位数字进行平方,因此溢出应该不是问题。我正在使用 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 的平方可以通过添加前 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 回答