【发布时间】:2016-04-17 01:28:08
【问题描述】:
我只是从 C 开始,但我现在正在做的是一个简单的数学运算。我想要的是?我想要一个接受指数并返回二次幂的函数。我想使用逻辑移位运算符。 Wiki: Logical shifts
逻辑转换可以作为有效的执行方式 无符号整数乘以或除以 2 的幂。 在有符号或无符号二进制数上左移 n 位具有 乘以 2n 的效果。
但有一点我无法理解,它不适用于大指数,例如 32。下面的代码中的详细信息。那么,如何在不使用数学库的情况下正确实现这样的功能呢?提前致谢。
long power_of_two_ext(int exp) {
exp = 32; // for testing purpose only
long retL = pow(2, exp);
printf("MATH pow() and long ---> %ld\n", retL);
long retL2 = 1 << exp;
printf("Shift bits left and long ---> %ld\n", retL2);
long long retL3 = 1 << exp;
printf("Left shift and long ---> %llu\n", retL3);
return retL;
}
MATH pow() and long ---> 4294967296
Left shift and long long ---> 1
Left shift and long ---> 1
【问题讨论】:
-
如您所见,左移位有其局限性。
标签: c logical-operators