在我的系统上,我得到:
sizeof ( int ) = 4
sizeof ( long ) = 4
当我用C程序检查时,int
和long
在以下情况下都会溢出为负数:
a = 2147483647;
a++;
如果两者都能表示同样范围的数字,为什么我还要使用
long
关键字呢?在我的系统上,我得到:
sizeof ( int ) = 4
sizeof ( long ) = 4
当我用C程序检查时,int
和long
在以下情况下都会溢出为负数:
a = 2147483647;
a++;
long
关键字呢?int
的最小范围为-32767到32767,而long
的最小范围为-2147483647到2147483647。
如果您编写的代码可能需要在不同的C实现上编译,则应使用long
,如果需要这个范围。 如果您只编写针对一个特定实现的非便携式代码,则无所谓。
stdint.h
中定义的数据类型。 - Paul R<stdint.h>
中的类型会很有用。 - cafint
至少为32位,当然Windows也有32位的int
。在Windows和任何POSIX系统上都能工作的代码肯定具有高度的可移植性。 :-) - R.. GitHub STOP HELPING ICE因为sizeof(int)==sizeof(long)并不总是成立的。int通常代表至少2*8位的最快速度。而long则至少为4*8位。
C语言定义了一些整型数据类型并指定了它们之间的大小关系。基本上,它表明 sizeof(long long) >= sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char),且 sizeof(char) 等于 1。
但实际的大小没有被定义,而是依赖于你所运行的系统架构。在 32 位 PC 上,int 和 long 通常是四个字节,long long 是 8 个字节。但在 64 位系统上,long 通常是 8 个字节,因此与 int 不同。
还有一个名为 uintptr_t(和 intptr_t)的类型,保证具有与数据指针相同的大小。
重要的是要记住不要假设你可以将指针值存储在 long 或 int 中。具备可移植性可能比你想象的更加重要,而且很可能你会在不久的将来想在 64 位系统上编译你的代码。
long int
的整数转换等级高于int
)。 - caf我认为这更多是一个编译器问题,因为现在计算机运行得更快,需要处理更多的数字,而以前则不然。
在不同的平台或使用不同的编译器时,int 和 long 可能会有所不同。 如果您不打算将代码移植到其他地方或使用不同的机器,则选择您想要的那个,这不会有任何影响。
内置数据类型的大小根据C语言实现的不同而变化,但它们都有最小范围。现在,int通常是4字节长(32位),因为大多数操作系统都是32位。请注意,char始终为1个字节。
CHAR_BIT==8
,当然Windows也有CHAR_BIT==8
,因此在大多数情况下,CHAR_BIT
等于8。值得注意的例外是古老的遗留主机(大多数情况下没有影响),其中CHAR_BIT
通常为9或10;以及DSPs(其中CHAR_BIT
可能为32,而sizeof(char)
、sizeof(short)
、sizeof(int)
和sizeof(long)
均为1)。 - R.. GitHub STOP HELPING ICE数据类型的大小取决于编译器。不同的编译器具有不同大小的int和其他数据类型。
因此,如果您编写的代码将在不同的机器上运行,则应使用long或者取决于变量可能具有的值的范围。