这个问题已经在这里有了答案:

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。 现在为什么:

  1. 像7788994347298743234这样的大量数字仍然适合该设置并被打印出来吗? 当您尝试插入一些超出容器指定类型范围的数据时,C ++的行为是什么? 它不会拒绝并在插入时返回false吗? 难道是它使用比32位更多的内存来存储该数据吗?

  2. 以零开头的数字无效吗? 为了使0113变为75,进行了哪些隐式类型转换?

我问这些问题是因为如果我的集合需要存储可能具有任意前导零的元素,例如CRC32哈希的结果(这里只是抛出示例,不知道这是否实际适用...)? 谢谢!

#1楼 票数:0 已采纳

好吧,看起来好像是重复的。 如果管理员认为合适,可以删除它。 在评论中的人的帮助后快速对自己回答:

  1. 规范说unsigned long int具有“至少32位”,这意味着实际范围可能达到64位,具体取决于机器和编译器。 我当时在看这样的文档: https : //msdn.microsoft.com/zh-cn/library/s3f49ktz%28v=vs.80%29.aspx ,它特定于Visual Studio,早在2005年。

  2. 显然,在C ++中,前导零表示八进制数。 都没有碰过,因为学校,8年前这一概念......良好的联系,通过评析指出: http://en.cppreference.com/w/cpp/language/integer_literal C ++ INT 0改变之前的整个价值 如何C用前导零处理整数文字,atoi又如何呢?

  ask by Superziyi translate from so

未解决问题?本站智能推荐:

2回复

如何将无符号长整数(DWORD)重新解释为C ++中的带符号长整数?

我想重新解释一个unsigned long (实际上是一个DWORD )作为signed long 。 我试过了: 但是,VC ++ 2010 intellisense告诉我“无效的类型转换”。 为什么? 我如何解决它?
1回复

如何将SHA1转换为无符号长整数的array [5]?

为了我使用的库/子系统的目的,我必须将SHA1(使用openssl计算)转换为5个元素的无符号长整数(32位变量)数组,或者由我自己创建上述SHA1-5-long-array。 原因: SHA1 (160 bits) = 5 x unsigned long int (32 bits)
4回复

C ++:带符号64位整数中两个无符号64位整数的差值

我试图用C ++编写一个函数,它接受两个64位无符号整数,并返回它们在带符号的64位整数中的差异。 由于溢出情况,它似乎有点复杂 - 由于输入是两个无符号正整数,如果这两者之间的绝对差值大于最大有符号值(INT64_MAX),则差值不能通过有符号整数传输。 所以我编写了以下实现,我想知道,首
2回复

当我提供一个只接受无符号的函数的有符号整数时,有没有办法让GCC提醒我?

使用g++编译时,此代码不会发出警告: 它编译得很好,但结果是错误的: 4294967295 。 GCC是否有任何编译器-W*选项?
2回复

C ++无符号无限循环比较错误

注意到我正在开发的一个程序中的一个错误,提取了代码,基本上就是这个。 它与有符号的int进行无符号比较,并导致无限循环: 我尝试使用此代替: 我以为可以解决有符号/无符号比较问题,但事实并非如此,它仍然遇到了无限循环。 因此,我还尝试将其强制转换为unsigned int,
2回复

无符号用户定义整数文字

假设我想定义一个整数文字,它也允许负值,例如-12_km 。 即,我想做 但是,这不被我的编译器(gcc)接受。 该标准提到了此类文字运算符的参数列表的允许类型列表,但其中没有带符号的整数类型。 为什么是这样的标准? 为什么它不允许用户定义的有符号整数文字?
2回复

C ++模板特征指定任何无符号整数类型

我正在尝试实现一个只接受无符号整数类型的函数。 以下是我到目前为止所尝试的内容。 它适用于“unsigned int”,但为什么不编译为“unsigned short?” 注意:MSVS 2017社区C ++ 14选项。
4回复

获取C ++中最大的有符号整数类型

假设我必须接受大小作为处理数组的接口的参数。 对于前 在这里,我使用size_t时要牢记以下几点: 长度必须始终为正 size_t始终被类型定义为系统中最大的无符号整数类型。 std::size_t可以存储任何类型的理论上可能存在的对象的最大大小。 但是,我