我试图将表示为字符串的整数(“18446744073709551616”)直接转换为二进制代码(0b1000000000000000000000000000000000000000000000000000000000000000000),即将大型表示为无符号长整型int。 如果你有另一种存储大量值的方法,请告诉我。
答案 0 :(得分:1)
C ++没有对任意精度整数的本机支持,但是实现这个特定用例所需的并不困难。你需要:
std::vector<unsigned char>
存储基数为256的数字然后程序变为:
std::vector<unsigned char> res;
res.push_back(0);
for (int i=0,n=str.size(); i<n; i++) {
mul10(res);
add(res, str[i]-'0');
}
例如,add
可以通过以下方式实现:
void add(std::vector<unsigned char>& num, int digit) {
for (int i=0,n=num.size(); digit && i < n; i++) {
int x = num[i] + digit;
num[i] = x & 255;
digit = x >> 8;
}
if (digit) {
num.push_back(digit);
}
}
乘以10是通过将最低有效数字相乘,将低8位存储在数字中并保持进位x >> 8
以将其添加到更高的数字。然后你将高位数相乘,加上进位,存储低8位并将新进位移动到更高的位数......