c - C编程中数据类型 `long`

标签 c

有什么区别 long int numberOfPoints = 131071100;long int numberOfPoints = 131071100L;

并且是一个赋值,例如 int numberOfPoints = 131071100L; 合法的?如果是的话,那和前两者有什么区别?

最佳答案

131071100这样的无后缀整数常量的类型是intlong intlong long int<中的第一个 其中可以表示它的值。 131071100 的值始终在数学上是正确的;只是它的类型不同(因为 long int 至少是 32 位,所以它总是 intlong int)。

L后缀的,是long intlong long int类型;同样,该值始终是正确的——并且 131071100L 始终是 long int 类型。

用不同数值类型的表达式初始化某种算术类型的对象是完全有效的。该值被隐式转换为目标类型。在这种情况下,由于目标类型是 long int,因此不存在溢出风险。

对于您的特定情况,唯一之间的区别

long int numberOfPoints = 131071100;

long int numberOfPoints = 131071100L;

是后者稍微明确一点;意思完全一样。

如果表达式比单个常量更复杂,则仍然需要 L 后缀。例如,如果您这样写:

long int foo = 1024 * 1024 * 1024;

那么每个常量 1024 都是 int 类型——整个表达式也是如此。如果 int 恰好是 16 位,则乘法将溢出,即使 数学 结果适合 long int。 (文字的类型根据其值进行调整;大型表达式的类型则不然。)为避免该问题,您可以这样写:

long int foo = 1024L * 1024L * 1024L;

关于c - C编程中数据类型 `long`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23069236/

相关文章:

c - 删除与头连接的循环双向链表

c - 将输出流式传输到 stdout,就地状态更新到 stderr

c - 这是一个有效的 C ifdef 结构吗?有没有更好的办法?

c - 迭代行而不传递偏移量

c - 如何读取文本文件图像并将其保存到数组中?

c++ - OpenGL 中多边形的渐变

c - 如何对两个不同的方程使用一个函数两次?

从 C 中的 CSV 文件计算值的平均值

c - Yocto-gcc 找不到共享库

c - 为 Atlas (os-x, macports) 制作动态库