uint64_t x(1 << 35)
給出的輸出爲0
並帶有警告。最適合初始化這些大值的是什麼?如何在C++ 11中初始化uint64_t
3
A
回答
9
這是因爲1 << 35
是使用int
的操作。如果你需要64位的類型,那麼使用1ULL << 35
來確保它是一個使用unsigned long long
(保證至少爲64位)的操作。
2
您遇到的問題是編譯時間評估常量表達式1 < < 35是用int類型執行的。所以很可能你是這種類型的溢出,並且行爲是未定義的!
最簡單的解決方法是使用1ULL < < 35.無符號長long文字必須至少爲64位。
4
auto x = std::uint64_t(1) << 35;
1
uint64_t x = 1000000000ull;
的ULL馬克值作爲無符號長長
int64_t y = 1000000000ll;
同樣與正常長長。
uint64_t x2 = (1ull << 35ull);
只需在號碼的末尾添加ULL。
相關問題
- 1. 初始化C++ 11
- 2. C++ 11 seed_seq初始化
- 3. C++ 11自動初始化
- 4. 初始化列表C++ 11
- 5. 初始化矢量爲零C++/C++ 11
- 6. 函數包裝器初始化在C++ 11中如何工作?
- 7. C++ 11均勻初始化:字段初始化不恆定
- 8. C++ 11的值初始化之前聚集初始化
- 9. C++ 11是否重新初始化初始化成員字段?
- 10. 如何初始化在C#
- 11. 如何初始化在C++
- 12. C++ 11字符串初始化
- 13. C++ 11結構合理初始化
- 14. C++ 11 POD結構初始化錯誤
- 15. 流的初始化列表(C++ 11)
- 16. 如何初始化pre-C++ 11語法中的向量向量?
- 17. 如何初始化對象在向量C++ 11
- 18. '在結構初始化多餘元素' 與誤差C++ 11均勻初始化
- 19. 如何在Objective C中初始化NSMutableArray?
- 20. 如何在C#中初始化BigInteger?
- 21. 你如何初始化(通過初始化列表)在C + + 11中的多維std ::數組?
- 22. 如何初始化C++ 11風格的數組?
- 23. C#如何初始化WebService
- 24. 如何在C++ 11中將結構中的指針初始化爲空?
- 25. 在C++ 11中移動時,複製初始化是否有效?
- 26. 初始化程序列表在C++ 11中是否合法?
- 27. C++ 11在這個類中的成員初始化
- 28. 初始化在C++
- 29. 初始化在C++
- 30. 初始化在C++
使用正確類型的文字,表達式'1ULL << 35'不會溢出,因爲左側是足夠大的類型 –
'(static_cast(1)<< 35)'? –
在C++ 11及更高版本中,您還可以定義[新類型文字''](https://stackoverflow.com/questions/36406333/fixed-width-integer-literals-in-c),您可以用來避免這樣的問題。 –
mceo