我有一个unsigned long long
变量,它是我的系统上8个字节,我尝试做以下上:左移错误
unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;
我得到的警告:类型的左移计数> =宽度当这样做。此外,它似乎没有考虑到时间高涨转移。我该如何解决这个问题?
我有一个unsigned long long
变量,它是我的系统上8个字节,我尝试做以下上:左移错误
unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;
我得到的警告:类型的左移计数> =宽度当这样做。此外,它似乎没有考虑到时间高涨转移。我该如何解决这个问题?
您没有移动ull
,您正在移动timeHigh
,然后将该移位的结果存储在ull
中。
我怀疑timeHigh
不足以存储32位转换的结果。使timeHigh
为unsigned long long
,(编辑)或者可选地仅将timeHigh
分配给ull
,然后在timeLow
之前将or
移位。 (credit @JasonD)
或者只是先分配timeHigh给ull,然后在timeLow之前将其转移。 – JasonD
这是你的意思吗?
unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)
为什么系统是这样的(硬件/操作系统/编译器)?任何不使用uint64_t的原因? – Michael
尝试'ull | = timeHigh << 32ull;'注意数字后缀。 –
@ThomasMatthews:没有帮助,因为'<<'不执行通常的算术转换;左操作数(在默认促销后)必须足够大。 – aschepler