在我的系统上,我得到:
sizeof ( int ) = 4
sizeof ( long ) = 4
当我使用C程序检查时,int
和{ long
在以下情况下溢出到负面:
a = 2147483647;
a++;
如果两者都代表相同的数字范围,为什么我会使用long
关键字?
答案 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,或者它取决于变量可能具有的值的范围。