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