Algorithm 如何计算2^32而不直接与数字相乘?
计算2^32的最简单方法是Algorithm 如何计算2^32而不直接与数字相乘?,algorithm,Algorithm,计算2^32的最简单方法是2*2*2*2*2……=4294967296 ,我想知道有没有其他方法可以得到4294967296?(2^16*2^16被视为与2*2*2….相同的方法) 有多少种计算方法? 有什么函数可以计算它吗 如果没有2*2*2…2的话,我想不出任何方法来计算它。如果你在一台普通计算机上,你可以通过31(即2选项: 2 << 31 1为什么不使用Math.Pow()(在.NET中)。我认为大多数语言(或环境)都支持类似的功能: Math.Pow(2,32); 如果
2*2*2*2*2……=4294967296
,我想知道有没有其他方法可以得到4294967296?(2^16*2^16
被视为与2*2*2….
相同的方法)
有多少种计算方法?有什么函数可以计算它吗
如果没有
2*2*2…
2的话,我想不出任何方法来计算它。如果你在一台普通计算机上,你可以通过31
(即2选项:
2 << 31
1为什么不使用Math.Pow()
(在.NET中)。我认为大多数语言(或环境)都支持类似的功能:
Math.Pow(2,32);
如果您不太喜欢二进制魔法,那么我建议您使用quickpower。此函数在O(logn)
时间内计算xn
int qpower(int x,int n)
{
if(n==0)return 1;
if(n==1)return x;
int mid=qpower(x,n/2);
if(n%2==0)return mid*mid;
return x*mid*mid;
}
在Groovy/Java中,您可以使用长数字执行如下操作(在Java中,有符号整数的最大值为2^31)
long twoPOW32=1L您为什么要计算的可能重复项?这里有一个计算4294967296的函数:f()=4294967296
。没有花哨(tm)计算机操作中,将一个数字加倍就像将其自身相加一样简单。因此,将“1”32倍加倍——1+1是2,2+2是4,等等——就足够了。在int
为32位的系统上:-1U+1ULL
。在您编写的代码中,无符号长x=2,如果它是1@PascalCuoq,则显式强制转换会阻止UB是的,((unsigned long)2)而不是笨拙的(unsigned long)2
你也可以简单地写2ULL
我没有下表决,但它使用了两个什么?将一个值移32也不算不正确。Meh。幂次提升的操作数是2,而不是1。我对它下表决了,但有一秒钟我100%确定有2@pivovarit。因此不显示在第一瞬间发生的编辑。我想一想,OP没有指定编程平台。@RobertHarvey我想大多数语言都支持类似的函数Pow()
,他问这个有没有函数可以计算它?
,所以我认为这是一个选择。无论如何,谢谢你。
long twoPOW32 = 1L << 32;