【问题标题】:Is there a fundamental type for natural numbers in C/C++?C/C++ 中有自然数的基本类型吗?
【发布时间】:2016-06-19 13:38:51
【问题描述】:

我有一个问题,我需要将一些变量声明为自然数。对于应该是自然数的变量,我应该使用哪种基本类型?喜欢整数是 int ...

【问题讨论】:

  • unsigned int 怎么样?所有自然数高达 21.47 亿...
  • @LukePark 是 32 位签名 int 的范围(负值和正值)。 unsigned 是上限的两倍,而下限是 0
  • 啊,是的。对不起,最后一个值加倍。
  • 您实际解决的问题是什么?在您的问题中提及它(因此您应该编辑您的问题)将有助于获得更相关的答案。

标签: c++ c variables int variable-declaration


【解决方案1】:

没有任何特定的数据类型表示自然数。但是您可以将数据类型用于整数,然后进行一些适当的编辑。以下是声明整数的几种方法:

 - unsigned short int

 - unsigned int

 - unsigned long int

 - unsigned long long int

【讨论】:

    【解决方案2】:

    请注意,计算机(甚至可能是整个宇宙)是一台有限的机器;它的位数有限(但数量非常多)(我的笔记本电脑可能少于 1015 位)。

    当然int 不是数学整数。在我的机器上,int 是一个 32 位有符号整数(long 是一个 64 位有符号整数),所以 int-s 只有 232 个可能的值(而且要少得多比数学整数的无限基数)。

    因此,一台计算机只能表示一组有限的数字,但数字相当大。这小于无限的自然数集(请记住,其中一些在整个地球上无法表示;请阅读Richard's paradox)。

    您可能想使用unsigned(与unsigned int 相同,在我的机器上表示最大为232-1 的自然数)、unsigned longunsigned long long 或(来自@ 987654332@) 类型,如uint32_tuint64_t ... 你会得到 32 位或 64 位的无符号二进制数。一些编译器和实现可能知道uint128_t 或类似的东西。

    如果这还不够,请考虑使用big ints。您可以使用 GMPlib 之类的库(但即使是大型计算机也无法表示极大的自然数 - 以及它们的所有位 -...,而且您自己的大脑也无法理解它们)。

    【讨论】:

      【解决方案3】:

      以下类型类似于在 C++ 中设置为 0 的自然数:

      • unsigned char
      • unsigned short int
      • unsigned int
      • unsigned long int
      • unsigned long long int,从 C++11 开始。

      每一个都在它可以表示的值范围内与另一个不同。

      【讨论】:

      • unsigned char 声明存储自然数的变量?为什么charchar 不声明字符吗?
      【解决方案4】:

      如果您需要不能为负数的数字,最好的选择是unsigned int。想了解更多数据类型,可以查看this site

      【讨论】:

      • 可能这就是我正在寻找的东西,但我已经看到很多关于 unsignedunsigned int 的讨论,我有一些疑问。
      • @Skyp89 什么“怀疑”? unsignedunsigned int 声明相同的东西。 int 是可选的/隐含的。 (另外,signedsigned int 和裸int 都是等价的。)就语义而言,我在我特别关心标牌的任何地方使用signedunsigned,如果不相关则使用int(只有在调用其他人的函数时才会真正发生)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2012-12-31
      • 1970-01-01
      • 2017-02-05
      相关资源
      最近更新 更多