【发布时间】:2019-12-04 08:47:55
【问题描述】:
在使用 GCC 的 Linux 上,1UL<<44 是 0x100000000000
但在使用 MSVC 的 Windows 上,1UL<<44 是 0
我很困惑。
这是否表明在 Windows 上左移不能移动超过 32 位?
【问题讨论】:
-
在 Windows 上
unsigned long有 4 个字节,在 32/64 位模式下。也许试试1ULL << 44。在this site 上,您可以检查long范围。 -
类型
long和unsigned long不保证大于 32 位。显然在 Windows 下它们 是 32 位,所以是的,这限制了您可以将它们向左移动的程度。另一方面,看起来你的 Linux 机器正在实现更长的 long 类型,可以操纵 44 位值,例如 0x100000000000。 -
@rafix07 非常感谢,ULL 解决了这个问题
标签: c windows visual-studio visual-c++ bitwise-operators