【发布时间】:2021-07-16 11:46:39
【问题描述】:
我正在尝试用 c++ 计算 2 ** 128,但它会溢出,我得到的值为 0。 关于如何计算这个的任何想法?我还需要在终端上获取它,但 iostream 和 stdio.h 不支持我尝试过的名为 __int128 的。
#include <cstring>
int main(){
unsigned __int128 a = 2;
for(int i; i < 129; i++){
a = a * 2;
}
std::cout << a << std::endl;
}
或
#include <iostream>
#include <cstring>
int main(){
long long unsigned int a = 2;
for(int i; i < 129; i++){
a = a * 2;
}
std::cout << a << std::endl;
}
是我尝试过的代码。
【问题讨论】:
-
nitpick:我记得有些语言使用
a ** b来表示 a 的 b 次方,但我不知道这是常见的表示法。常见的是a ^ b,不幸的是这也令人困惑,因为^是一个逻辑运算符。 -
您可以使用类似:boost.org 或 sourceforge.net/projects/cpp-bigint 来执行此类计算。看stackoverflow.com/questions/1188939/…
-
还有一个库提供uint128_t` or `uint256_t
-
2 ** 128 相当于将 1 左移 128 次。无需乘以任何东西或使用任何长的数学库。
-
如果是琐碎的工作,不必用 c++ 来完成,那么你可以尝试一下 python 一行:
2 ** 128