计算 2^32 的最简单方法是2*2*2*2*2......= 4294967296
,我想知道有没有其他方法可以得到 4294967296?(2^16 * 2^16
被视为与 相同的方法2*2*2....
)
有多少种计算方法?
有什么函数可以计算吗?
我想不出任何方法来计算它2*2*2...
计算 2^32 的最简单方法是2*2*2*2*2......= 4294967296
,我想知道有没有其他方法可以得到 4294967296?(2^16 * 2^16
被视为与 相同的方法2*2*2....
)
有多少种计算方法?
有什么函数可以计算吗?
我想不出任何方法来计算它2*2*2...
2 << 31
有点偏移。它有效地将 2 提高到 32 次方。
如果您不太喜欢二进制魔法,那么我建议您使用 quickpower 。此函数会及时计算 x n。O(logn)
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;
}
2
如果您使用的是普通计算机,您可以通过31
(ie )左移位移2<<31
以获得 2^32。
在标准 C 中:
unsigned long long x = 2ULL << 31;
unsigned long long
是必需的,因为unsigned long
不能保证 simple 足够大来存储 的值2<<31
。
在C99 标准的第5.2.4.2.1节第 1 段中:
...以下内容应替换为与根据整数提升转换为相应类型的对象的表达式具有相同类型的表达式。它们的实现定义值的大小(绝对值)应等于或大于所示值,符号相同。
— 类型对象的最大值
unsigned long int
ULONG_MAX 4294967295 //
2^32 - 1
— 类型对象的最大值
unsigned long long int
ULLONG_MAX 18446744073709551615 //
2^64 - 1
选项:
1 << 32
2^32 = (2^32 - 1) + 1 = (((2^32 - 1) + 1) - 1) + 1 = ...
在 Groovy/Java 中,您可以使用长数(有符号整数在 Java 中最大为 2^31)执行以下操作
long twoPOW32 = 1L << 32;
为什么不使用Math.Pow()
(在 .NET 中)。我认为大多数语言(或环境)都会为您支持类似的功能:
Math.Pow(2,32);