我有一个unsigned long long
变量,在我的系统上是8个字节,我正在尝试执行以下操作:
unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;
我收到警告:左移计数&gt; =执行此操作时类型的宽度。此外,它似乎没有考虑到时间偏移。我该如何解决这个问题?
答案 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)