在某些编程语言中,通常是 C、C++ 和 Java,整数数据类型是
int
、short
和 long
。
int
数据类型通常是 32 位。 short
数据类型通常小于 int
数据类型,long
数据类型通常大于 int
数据类型。
整数数据类型的第一个 bit 是 bit 符号。 负数以“1”开头,非负数以“0”开头。
因此,32 位数据类型通常 存储在
-(2^31)
到 (2^31 - 1)
范围内的数字。
为什么我们不能拥有无限大小的数据类型,以便我们可以存储无限范围的数字?
作为低级编程语言,C 和 C++ 的设计紧密遵循通用硬件的功能。原始构建块(基本类型)对应于常见 CPU 本身支持的实体。 CPU 通常可以非常高效地处理字节和字; C 将它们称为
char
和 int
。 (更准确地说,C 定义 int
的方式是编译器可以使用目标 CPU 的字大小。)CPU 也支持双倍大小的字,这在历史上对应于 中的 long
数据类型。 C,后来是 C 和 C++ 的 long long
类型。半字对应于short
。基本整数类型对应于 CPU 可以很好处理的事物,具有足够的灵活性来适应不同的体系结构。 (例如,如果 CPU 不支持半字,则 short
的大小可能与 int
相同。)
如果硬件支持无限大小的整数(仅受可用内存限制),那么可能会存在将其添加为 C(和 C++)中的基本类型的争论。在此之前,C 和 C++ 中对大整数(请参阅bigint)的支持已归入库。
一些较新的高级语言确实内置了对任意精度算术的支持。
简单答案:性能
对于 C、C++ 和 Java 三种语言来说,都存在用于大整数的库。但使用这些库的性能通常比常规数据类型差得多。无论是 CPU 时间还是内存使用率。
整数数据类型的第一位是位符号。负数以“1”开头,非负数以“0”开头。
不一定。例如,一补数就不是这样工作的。而其他一些表示负数的方法则不然。即使负数的两个补码确实以 1 开头,它也不是真正的符号位。