如何计算2 ^ 32而不直接乘数?

时间:2013-07-12 16:46:04

标签: algorithm

计算2 ^ 32的最简单方法是2*2*2*2*2......= 4294967296 ,我想知道有没有其他方法可以获得4294967296? (2^16 * 2^16被视为与2*2*2....

相同的方法

以及计算它的方法有多少? 有没有计算它的功能?

如果没有2*2*2...

,我无法想出任何计算方法

6 个答案:

答案 0 :(得分:9)

2 << 31

有点转变。它有效地提高了2到32次方。

答案 1 :(得分:1)

如果您使用的是普通计算机,则可以通过2(即31)将位移2<<31留下以获得2 ^ 32。

在标准C中:

unsigned long long x = 2ULL << 31;

unsigned long long是必需的,因为不能保证简单的unsigned long足够大以存储2<<31的值。

在C99标准的 5.2.4.2.1 第1段中

  

......   以下内容应替换为与a相同类型的表达式   表达式,它是根据整数转换的相应类型的对象   促销活动。它们的实现定义值的大小(绝对值)应等于或大于显示的值,具有相同的符号。

     

- 类型为unsigned long int

的对象的最大值      

ULONG_MAX 4294967295 // 2^32 - 1

     

- 类型为unsigned long long int

的对象的最大值      

ULLONG_MAX 18446744073709551615 // 2^64 - 1

答案 2 :(得分:1)

选项:

  1. 1 << 32
  2. 2^32 = (2^32 - 1) + 1 = (((2^32 - 1) + 1) - 1) + 1 = ...
  3. 在桌子上排列32个项目。计算你可以选择它们的子集的方式。

答案 3 :(得分:1)

如果你不喜欢二元魔法,那么我会建议 quickpower 。这个函数在O(logn)时间计算x n

 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;
 }

答案 4 :(得分:0)

为什么不使用Math.Pow()(在.NET中)。我认为大多数语言(或环境)会支持您的类似功能:

Math.Pow(2,32);

答案 5 :(得分:0)

在Groovy / Java中,您可以使用长数字执行以下操作(Java中有符号整数最多可以为2 ^ 31)

long twoPOW32 = 1L << 32;