左移错误

时间:2012-12-18 16:44:42

标签: c++ c

我有一个unsigned long long变量,在我的系统上是8个字节,我正在尝试执行以下操作:

unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;

我收到警告:左移计数&gt; =执行此操作时类型的宽度。此外,它似乎没有考虑到时间偏移。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:10)

您没有移动ull,而是移动timeHigh,然后将该移位的结果存储在ull中。

我怀疑timeHigh不足以存储32位移位的结果。将timeHigh设为unsigned long long,(修改),或者只是将timeHigh分配给ull,然后在or之前转移timeLow在{{1}}。 (信用@JasonD)

答案 1 :(得分:0)

timeHigh似乎是32位类型。在32位左移后,它全部为零。你必须在转移之前将timeHigh转换为很长的类型。

unsigned long long ull;
ull = timeHigh;
ull = ull << 32;
ull |= timeLow;

答案 2 :(得分:0)

这是你的意思吗?

unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)