如果移位的左操作数很长,我似乎应该能够在 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/