为什么原始数据类型具有固定大小?
Why do Primitive Data Types have a Fixed Size?
在大多数编程语言中,通常是 C、C++ 和 Java,整数数据类型是“int”、“short”和“long”。 “int”数据类型通常是 32 位。 “short”数据类型通常与“int”数据类型一样小,“long”数据类型通常与“int”数据类型一样大。数据类型的第一位是符号位。负数以 1 开头,非负数以 0 开头。因此,32 位数据类型通常存储 -(2^31) 到 (2^31 - 1) 范围内的数字。但是为什么每个原始数据类型都有固定的大小呢?为什么我们不能拥有无限大小的数据类型,以便我们可以存储无限范围的数字?
简单回答:性能
对于 C、C++ 和 Java 这三种语言,都存在用于大整数的库。但是使用这些库的性能通常比常规数据类型差得多。在 cpu 时间和内存使用方面。
作为低级编程语言,C和C++的设计紧跟普通硬件的能力。原始构建块(基本类型)对应于通用 CPU 原生支持的实体。 CPUs 通常可以非常有效地处理字节和单词; C 称这些为 char
和 int
。 (更准确地说,C 定义 int
的方式使得编译器可以使用目标 CPU 的字大小。)还有 CPU 支持双倍大小的字,它在历史上对应于 C 中的 long
数据类型,后来对应于 C 和 C++ 中的 long long
类型。半字对应 short
。基本整数类型对应于 CPU 可以很好处理的事物,具有足够的灵活性以适应不同的体系结构。 (例如,如果 CPU 不支持半字,short
可能与 int
大小相同。)
如果硬件支持无限大小的整数(仅受可用内存限制),则可能有理由将其添加为 C(和 C++)中的基本类型。在此之前,C 和 C++ 中对大整数的支持(请参阅 bigint)已归属于库。
一些较新的高级语言确实内置了对任意精度算术的支持。
在大多数编程语言中,通常是 C、C++ 和 Java,整数数据类型是“int”、“short”和“long”。 “int”数据类型通常是 32 位。 “short”数据类型通常与“int”数据类型一样小,“long”数据类型通常与“int”数据类型一样大。数据类型的第一位是符号位。负数以 1 开头,非负数以 0 开头。因此,32 位数据类型通常存储 -(2^31) 到 (2^31 - 1) 范围内的数字。但是为什么每个原始数据类型都有固定的大小呢?为什么我们不能拥有无限大小的数据类型,以便我们可以存储无限范围的数字?
简单回答:性能
对于 C、C++ 和 Java 这三种语言,都存在用于大整数的库。但是使用这些库的性能通常比常规数据类型差得多。在 cpu 时间和内存使用方面。
作为低级编程语言,C和C++的设计紧跟普通硬件的能力。原始构建块(基本类型)对应于通用 CPU 原生支持的实体。 CPUs 通常可以非常有效地处理字节和单词; C 称这些为 char
和 int
。 (更准确地说,C 定义 int
的方式使得编译器可以使用目标 CPU 的字大小。)还有 CPU 支持双倍大小的字,它在历史上对应于 C 中的 long
数据类型,后来对应于 C 和 C++ 中的 long long
类型。半字对应 short
。基本整数类型对应于 CPU 可以很好处理的事物,具有足够的灵活性以适应不同的体系结构。 (例如,如果 CPU 不支持半字,short
可能与 int
大小相同。)
如果硬件支持无限大小的整数(仅受可用内存限制),则可能有理由将其添加为 C(和 C++)中的基本类型。在此之前,C 和 C++ 中对大整数的支持(请参阅 bigint)已归属于库。
一些较新的高级语言确实内置了对任意精度算术的支持。