我的系统上有一个unsigned long long
8 字节的变量,我正在尝试执行以下操作:
unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;
执行此操作时,我收到警告:左移计数> = 类型宽度。此外,它似乎没有考虑到 timeHigh 转移。我该如何解决这个问题?
您不是在转移ull
,而是在转移timeHigh
,然后将转移的结果存储在ull
.
我怀疑这timeHigh
不足以存储 32 位移位的结果。做timeHigh
一个unsigned long long
, (编辑) 或者只是分配timeHigh
给ull
然后在or
'ing in之前转移它timeLow
。(信用@JasonD)
timeHigh 似乎是 32 位类型。左移 32 位后全为零。您必须在移位之前将 timeHigh 转换为 long long 类型。
unsigned long long ull;
ull = timeHigh;
ull = ull << 32;
ull |= timeLow;
这是你的意思吗?
unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)