C 为什么这种幂函数会起作用? res=1; 对于(i=1;i
让我们假设你有一个无符号数的二进制表示。你如何找到十进制表示 让我们举一个简单的四位示例:C 为什么这种幂函数会起作用? res=1; 对于(i=1;i,c,loops,C,Loops,让我们假设你有一个无符号数的二进制表示。你如何找到十进制表示 让我们举一个简单的四位示例: res = 1; for ( i = 1; i <= n; i <<= 1 ) // n = exponent { if ( n & i ) res *= a; // a = base a *= a; } 现在,如果每一位的基数不是固定为2,而是前一位的平方,然后乘以每一位的贡献,而不是相加,那么会发生什么 N = | 0 |
res = 1;
for ( i = 1; i <= n; i <<= 1 ) // n = exponent
{
if ( n & i )
res *= a; // a = base
a *= a;
}
现在,如果每一位的基数不是固定为2,而是前一位的平方,然后乘以每一位的贡献,而不是相加,那么会发生什么
N = | 0 | 1 | 0 | 1 |
-----------------------------------------
| 2^3 = 8 | 2^2 = 4 | 2^1 = 2 | 2^0 = 1 |
-----------------------------------------
| 0 | 4 | 0 | 1 | N = 4 + 1 = 5
如您所见,代码计算a^N什么是
a
?请尝试更好地解释您的问题您是否尝试在循环中添加printf
,以查看变量的值?谢谢,我收到了
N = | 0 | 1 | 0 | 1 |
----------------------------
| a^8 | a^4 | a^2 | a^1 |
----------------------------
| 0 | a^4 | 0 | a^1 | N = a^4 * a^1 = a^(4+1) = a^5