int v/s.在C长

4 c int long-integer

在我的系统上,我得到:

sizeof ( int )  = 4
sizeof ( long ) = 4
Run Code Online (Sandbox Code Playgroud)

当我检查一个C程序时,两个int&long溢出到负面后:

a = 2147483647;
a++;
Run Code Online (Sandbox Code Playgroud)

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

caf*_*caf 7

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

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

  • 当尺寸很重要时,使用`stdint.h`中的类型. (4认同)
  • 在大多数情况下,人们需要的是最小保证范围,在这种情况下标准类型是充足的.在需求较窄的情况下,`<stdint.h>`中的类型可能很有用. (2认同)

Jur*_*obl 6

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


dka*_*dal 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位系统上编译代码.