[英]C++ unsigned long integer insertion into STL container and print back weirdness [duplicate]
这个问题已经在这里有了答案:
C ++数据类型太新了,我观察到一些很奇怪的东西,我无法在Internet上找到答案:
std::set<unsigned long> test;
test.insert(7788994347298743234);
test.insert(0113);
std::set<unsigned long>::iterator it;
for(it = test.begin(); it != test.end(); it++) {
std::cout << *it << std::endl;
}
输出:
75
7788994347298743234
这是一个以“ unsigned long int”作为元素类型的集合,范围为0到4,294,967,295。 现在为什么:
像7788994347298743234这样的大量数字仍然适合该设置并被打印出来吗? 当您尝试插入一些超出容器指定类型范围的数据时,C ++的行为是什么? 它不会拒绝并在插入时返回false吗? 难道是它使用比32位更多的内存来存储该数据吗?
以零开头的数字无效吗? 为了使0113变为75,进行了哪些隐式类型转换?
我问这些问题是因为如果我的集合需要存储可能具有任意前导零的元素,例如CRC32哈希的结果(这里只是抛出示例,不知道这是否实际适用...)? 谢谢!
好吧,看起来好像是重复的。 如果管理员认为合适,可以删除它。 在评论中的人的帮助后快速对自己回答:
规范说unsigned long int具有“至少32位”,这意味着实际范围可能达到64位,具体取决于机器和编译器。 我当时在看这样的文档: https : //msdn.microsoft.com/zh-cn/library/s3f49ktz%28v=vs.80%29.aspx ,它特定于Visual Studio,早在2005年。
显然,在C ++中,前导零表示八进制数。 都没有碰过,因为学校,8年前这一概念......良好的联系,通过评析指出: http://en.cppreference.com/w/cpp/language/integer_literal C ++ INT 0改变之前的整个价值 如何C用前导零处理整数文字,atoi又如何呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.