我想知道如何在C++中改变左边的值.例如:
1 << 180
Run Code Online (Sandbox Code Playgroud)
我认为结果应该是:
1532495540865888858358347027150309183618739122183602176
Run Code Online (Sandbox Code Playgroud)
(在python中测试[1 << 180]);
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)
你可以使用std :: bitset来做到这一点:
std::bitset<200> bits = 1; // 200 bits long
bits <<= 180;
Run Code Online (Sandbox Code Playgroud)
这有用多少取决于你想用它做什么.它无法转换为单个内置类型,因为它们不够大.但是还可以对其执行其他可能有用的操作.
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |