C++向左移动的价值很高

Rob*_*ert 3 c++ shift

我想知道如何在C++中改变左边的值.例如:

1 << 180
Run Code Online (Sandbox Code Playgroud)

我认为结果应该是:

1532495540865888858358347027150309183618739122183602176
Run Code Online (Sandbox Code Playgroud)

(在python中测试[1 << 180]);

awe*_*oon 6

Python支持任意精度算术,C++则不支持.

而且,根据Standard [expr.shift]:

如果右操作数为负数,或者大于或等于提升左操作数的位长度,则行为未定义.

为了在C++中使用大整数,您可以使用Boost库,它使用长算术实现为不同的库提供包装:

#include <boost/multiprecision/gmp.hpp>
#include <iostream>

int main()
{
    boost::multiprecision::mpz_int one(1);
    std::cout << (one << 180) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印

1532495540865888858358347027150309183618739122183602176
Run Code Online (Sandbox Code Playgroud)


Gal*_*lik 6

你可以使用std :: bitset来做到这一点:

std::bitset<200> bits = 1; // 200 bits long
bits <<= 180;
Run Code Online (Sandbox Code Playgroud)

这有用多少取决于你想用它做什么.它无法转换为单个内置类型,因为它们不够大.但是还可以对其执行其他可能有用的操作.