我有一個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