c++ - 如何将 long 移位超过 32 位?

如果移位的左操作数很长,我似乎应该能够在 C/C++ 中执行超过 32 位的移位。但这似乎不起作用,至少在 g++ 编译器中是这样。

例子:

unsigned long A = (1L << 37)

给予

A = 0

这不是我想要的。是我遗漏了什么还是这不可能?

-J

最佳答案

A 等于 0,因为 A 只有 32 位,所以当然您要将所有位向左移动,只剩下 0 位。你需要做一个64位的:

unsigned long long A = (1ULL << 37);

或者如果您打算使用 Visual C++:

unsigned __int64 A = (1ULL << 37);

https://stackoverflow.com/questions/2404439/

相关文章:

c++ - .o、.a 和 .so 文件有什么区别?

c++ - 在创建派生类对象时将参数传递给基类构造函数

c++ - `typedef typename Foo::Bar Bar'的模板声明

c++ - range-for循环中的访问索引

c++ - openMP 嵌套并行 for 循环与内部并行 for

c++ - 为什么在传递给另一个对象时调用 const 对象上的 std::move 会调用复制构造

c++ - 动态数组上基于范围的for循环?

c++ - 如何找到当前的系统时区?

c++ - 我可以使用基于范围的 for 循环轻松迭代 map 的值吗?

c++ - 在构造函数中调用类成员的构造函数