【问题标题】:Why do Primitive Data Types have a Fixed Size?为什么原始数据类型具有固定大小?
【发布时间】:2021-05-10 17:48:39
【问题描述】:

在大多数编程语言中,通常是 C、C++ 和 Java,整数数据类型是“int”、“short”和“long”。 “int”数据类型通常是 32 位。 “short”数据类型通常与“int”数据类型一样小,“long”数据类型通常与“int”数据类型一样大。数据类型的第一位是符号位。负数以 1 开头,非负数以 0 开头。因此,32 位数据类型通常存储从 -(2^31) 到 (2^31 - 1) 范围内的数字。但是为什么每个原始数据类型都有固定的大小呢?为什么我们不能拥有无限大小的数据类型,以便我们可以存储无限范围的数字?

【问题讨论】:

  • 我们确实有。例如,在 java 中,BigInteger 具有不确定的精度。但我们也有已知大小的数据类型,例如,出于性能原因和/或历史原因。
  • 这就像问为什么计算机支持位而不是任意基数。
  • 原语是硬件支持的。 Java没那么多,但C应该是直接对应
  • 我看不出这是如何基于意见的
  • 但是为什么每个原始数据类型都有一个固定的大小? 你将如何开始定义一个具有无限大小的类型而不从固定大小的东西开始呢?你甚至无法定义没有固定的东西“大小”意味着什么。

标签: java c++ c types primitive


【解决方案1】:

作为低级编程语言,C 和 C++ 的设计紧跟普通硬件的能力。原始构建块(基本类型)对应于普通 CPU 原生支持的实体。 CPU 通常可以非常有效地处理字节和字; C 将这些称为charint。 (更准确地说,C 以这样一种方式定义了int,使得编译器可以使用目标 CPU 的字长。)CPU 也支持双倍字长,这在历史上对应于 long 数据类型C,后来到 long long 类型的 C 和 C++。半字对应short。基本整数类型对应于 CPU 可以很好地处理的事情,具有足够的灵活性来适应不同的架构。 (例如,如果 CPU 不支持半字,short 可能与 int 大小相同。)

如果硬件支持无限大小的整数(仅受可用内存限制),那么可能会有一个论据将其添加为 C(和 C++)中的基本类型。在此之前,C 和 C++ 中对大整数的支持(请参阅 )已归入库。

一些较新的高级语言确实内置了对任意精度算术的支持。

【讨论】:

    【解决方案2】:

    简单的答案:性能

    对于所有三个 C、C++ 和 Java,都存在用于大整数的库。但是使用这些库的性能通常比常规数据类型差得多。在 CPU 时间和内存使用方面。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2013-09-21
      • 1970-01-01
      • 2018-03-17
      • 2013-01-06
      • 2010-11-01
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多