3

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

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

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

4

3 回答 3

10

您不是在转移ull,而是在转移timeHigh,然后将转移的结果存储在ull.

我怀疑这timeHigh不足以存储 32 位移位的结果。做timeHigh一个unsigned long long, (编辑) 或者只是分配timeHighull 然后在or'ing in之前转移它timeLow。(信用@JasonD)

于 2012-12-18T16:46:39.283 回答
0

timeHigh 似乎是 32 位类型。左移 32 位后全为零。您必须在移位之前将 timeHigh 转换为 long long 类型。

unsigned long long ull;
ull = timeHigh;
ull = ull << 32;
ull |= timeLow;
于 2012-12-18T16:49:41.743 回答
0

这是你的意思吗?

unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)
于 2012-12-18T16:50:29.293 回答