Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何计算2^32而不直接与数字相乘?_Algorithm - Fatal编程技术网

Algorithm 如何计算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^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;