int v / s。在C长

时间:2010-09-29 09:54:43

标签: c int long-integer

在我的系统上,我得到:

sizeof ( int )  = 4
sizeof ( long ) = 4

当我使用C程序检查时,int和{ long在以下情况下溢出到负面:

a = 2147483647;
a++;

如果两者都代表相同的数字范围,为什么我会使用long关键字?

8 个答案:

答案 0 :(得分:7)

int的最小范围为-32767到32767,而long的最小范围为-2147483647到2147483647.

如果您正在编写可能必须在不同C实现上编译的可移植代码,那么如果您需要该范围,则应使用long。如果你只为一个特定的实现编写不可移植的代码,那么你是对的 - 没关系。

答案 1 :(得分:6)

因为sizeof(int)== sizeof(long)并不总是如此。 int normaly表示最快的大小,至少2 * 8位。另一方面,长至少是4 * 8位。

答案 2 :(得分:5)

C定义了许多整数类型,并指定了它们的大小关系。基本上,它所说的是sizeof(long long)> = sizeof(long)> = sizeof(int)> = sizeof(short)> = sizeof(char),而sizeof(char)== 1

但实际大小未定义,取决于您运行的体系结构。在32位PC上,int和long通常是4个字节,long long是8个字节。但在64位系统上,long通常为8个字节,因此与int不同。

还有一种名为uintptr_t(和intptr_t)的类型,它保证与数据指针的大小相同。

要记住的重要一点是不要假设您可以将指针值存储在long或int中。可移植性可能比您想象的更重要,并且很可能您希望在不久的将来在64位系统上编译代码。

答案 3 :(得分:0)

我认为现在更多的是编译器问题,因为计算机速度更快,需要更多数字,就像以前一样。

答案 4 :(得分:0)

在不同的平台上或使用不同的编译器,int和long可能不同。 如果您不打算将代码移植到其他任何地方或使用其他机器,那么选择您想要的机器,它就没有什么区别。

答案 5 :(得分:0)

这取决于编译器,您可能想要查看它:What does the C++ standard state the size of int, long type to be?

答案 6 :(得分:0)

内置数据类型的大小根据C实现而变化,但它们都具有最小范围。如今,int通常是4个字节长(32位),因为大多数OS都是32位。请注意,char始终为1个字节。

答案 7 :(得分:0)

数据类型的大小取决于编译器。不同的编译器具有不同大小的int和其他数据类型。

因此,如果您制作的代码将在不同的机器上运行,您应该使用long,或者它取决于变量可能具有的值的范围。