C++ 整数极限vs长极限

C++ 整数极限vs长极限,c++,int,long-integer,C++,Int,Long Integer,大家都知道,int比long小 在后面,我正在阅读以下内容: INT_MIN (Minimum value for a variable of type int.) –2147483648 INT_MAX (Maximum value for a variable of type int.) 2147483647 LONG_MIN (Minimum value for a variable of type long.) –2147483648 LONG_MAX (Maximum

大家都知道,
int
long

在后面,我正在阅读以下内容:

INT_MIN (Minimum value for a variable of type int.)    –2147483648
INT_MAX (Maximum value for a variable of type int.)     2147483647

LONG_MIN (Minimum value for a variable of type long.)  –2147483648
LONG_MAX (Maximum value for a variable of type long.)   2147483647
同样的信息也可以找到

我一辈子都在撒谎吗?
int
long
之间的区别是什么?如果它们不能保存值的话?为什么?

< P>这是C++ +/P>

在许多(但不是全部)C和C++实现中,长大于 当前最流行的桌面平台,如Windows和 Linux,主要在32位处理器和大多数编译器上运行 平台使用具有相同大小和表示形式的32位int 作为一个长期的伙伴

< P>这是C++ +/P>

在许多(但不是全部)C和C++实现中,长大于 当前最流行的桌面平台,如Windows和 Linux,主要在32位处理器和大多数编译器上运行 平台使用具有相同大小和表示形式的32位int 作为一个长期的伙伴


<>参见Ref/P>< P>你提到了C++和ASP.NET。这两个是非常不同的

关于C和C++规范,唯一了解原始数据类型的是它可以存储的最大值范围。准备第一次惊喜-

int
对应于[-32767;32767]的范围。如今,大多数人认为int是32位数字,但实际上只能保证能够存储与16位数字相等的数据。还要注意的是,这个范围并不是更典型的[-32768;32767],因为C被设计成一个通用的抽象机器,用于各种平台,包括不使用2的负数补码的平台

因此,
long
实际上是一种“排序为32位”的数据类型也就不足为奇了。这并不意味着Linux上的C++实现(通常使用64位的代码来<代码>长<代码>)是错误的,但它意味着为Linux编写的C++代码应用程序假定代码“> < /COD> 64位是错误的”。当然,当将C++应用程序移植到Windows时,这是非常有趣的。 要使用的标准64位整数类型是
long
,这是在Windows上声明64位整数的标准方式


然而,.NET并不关心这些东西,因为它是由自己的规范建立起来的——部分原因是历史上包含了C和C++。在.NET中,
int
是32位整数,
long
是64位整数,
long
总是大于
int
。在C中,如果你使用<代码>长< /C>(32比特),并在其中存储一个值十兆,那么它就有可能工作,因为你的<代码>长< /C>实际上是一个64位的数字,C不关心这个区别——这正是大多数Linux C和C++编译器所发生的。由于出于性能原因,类型是这样定义的,因此编译器使用32位数据类型存储8位值是完全合法的(当您“为性能而优化”时,请记住这一点-编译器正在进行自己的优化)。NET仍然可以运行在没有32位2的补码整数的平台上,但是运行时必须确保类型可以容纳32位2的补码整数,即使这意味着下一个更大的类型(“浪费”)是内存的两倍。

< P>你提到了C++和ASP.NET。这两个是非常不同的

关于C和C++规范,唯一了解原始数据类型的是它可以存储的最大值范围。准备第一次惊喜-

int
对应于[-32767;32767]的范围。如今,大多数人认为int是32位数字,但实际上只能保证能够存储与16位数字相等的数据。还要注意的是,这个范围并不是更典型的[-32768;32767],因为C被设计成一个通用的抽象机器,用于各种平台,包括不使用2的负数补码的平台

因此,
long
实际上是一种“排序为32位”的数据类型也就不足为奇了。这并不意味着Linux上的C++实现(通常使用64位的代码来<代码>长<代码>)是错误的,但它意味着为Linux编写的C++代码应用程序假定代码“> < /COD> 64位是错误的”。当然,当将C++应用程序移植到Windows时,这是非常有趣的。 要使用的标准64位整数类型是
long
,这是在Windows上声明64位整数的标准方式


然而,.NET并不关心这些东西,因为它是由自己的规范建立起来的——部分原因是历史上包含了C和C++。在.NET中,
int
是32位整数,
long
是64位整数,
long
总是大于
int
。在C中,如果你使用<代码>长< /C>(32比特),并在其中存储一个值十兆,那么它就有可能工作,因为你的<代码>长< /C>实际上是一个64位的数字,C不关心这个区别——这正是大多数Linux C和C++编译器所发生的。由于出于性能原因,类型是这样定义的,因此编译器使用32位数据类型存储8位值是完全合法的(当您“为性能而优化”时,请记住这一点-编译器正在进行自己的优化)。NET仍然可以运行在没有32位2的补码整数的平台上,但是运行时必须确保类型可以容纳32位2的补码整数,即使这意味着下一个更大的类型(通常是“浪费”两倍的内存)。C++中的

< P>