C/C++ 中是否有自然数的基本类型

Is there a fundamental type for natural numbers in C/C++?

本文关键字:类型 自然数 C++ 是否      更新时间:2023-10-16

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

以下类型类似于C++中包含 0 的自然数集:

  • unsigned char
  • unsigned short int
  • unsigned int
  • unsigned long int
  • unsigned long long int,自C++11以来。

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

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

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

因此,计算机只能表示一组有限的数字,但可以表示相当大的数字集。这比无限组自然数要小(记住,其中一些在整个地球上是不可表示的;阅读理查德悖论)。

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

如果这还不够,请考虑使用大整数。你可以使用像GMPlib这样的库(但即使是一台大型计算机也无法表示非常大的自然数 - 以及它们的所有位-...,你自己的大脑也无法理解它们)。

如果您需要不能为负数的数字,最好的选择是 unsigned int 。如果您想了解有关数据类型的更多信息,可以查看此站点

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

 - unsigned short int
 - unsigned int
 - unsigned long int
 - unsigned long long int