有人可以向我解释为啥 L(长)必须在那里吗? [复制]

Posted

技术标签:

【中文标题】有人可以向我解释为啥 L(长)必须在那里吗? [复制]【英文标题】:Can somebody explain to me why the L (long) has to be there? [duplicate]有人可以向我解释为什么 L(长)必须在那里吗? [复制] 【发布时间】:2016-11-15 14:00:21 【问题描述】:

假设我声明了这个变量:

long k = 1060606060000;

如果我这样做,我会得到一个错误,因为这个数字对于一个整数来说显然太大了。为什么我必须在最后添加 L 才能让编译器识别它是一个长变量?尽管我显然说过我需要 k 是 long 类型。

【问题讨论】:

因为添加 L 你告诉编译器“嘿顺便说一句,这是一个长类型......” 那为什么还要在开头加长呢? @Geddi 如果您有一个“明显”不太长而无法放入int 的数字,例如0,您将如何指定它是一个长文字?然后,为什么有两种方法来指定长文字,而你只能有一种? 所以如果你使用它,你的编译器就会知道它很长 开头的long 是指定变量的类型(而不是指定值的类型)。 【参考方案1】:

因为如果没有附加lL,文字值将始终被解释为int

如果未指定l,您将把文字int 分配给long 类型的变量。

在编译时,编译器首先检查文字值,如果没有附加lL,它会将其解释为int

现在,如果数字大于Integer.MAX_VALUE,编译器将显示错误。

【讨论】:

但我显然将我的变量声明为 long,因为我的数字可以扩展 int 的范围。那么为什么编译器不自动转换为 long 呢? 将此视为一个两步过程。首先编译器检查文字,然后将文字的赋值应用于引用。检查字面值时会出现编译错误(未附加L / l)。 好的,谢谢。这有什么背景想法吗?我觉得这不是最实用的方法吧? @Geddi 不确定我是否理解。如果无法将文字分配给int,则在使用文字并分配给longLong 引用类型时,附加l 声明long 的方式。如果该值在int 范围内,那么您可以让转换完成它的工作,而不用打扰l 我想说的是 long 大于整数和下面的其他类型。因此,当我声明 long 类型的变量时,所有不扩展 64 位的数字都可以放入其中。那么,当它无论如何都可以放入时,为什么还要打扰文字的类型。抱歉,如果这听起来不合理,我显然是初学者。只是好奇。

以上是关于有人可以向我解释为啥 L(长)必须在那里吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有人可以向我解释一起使用的 Math.random() 和宽度/高度吗?

有人可以向我解释为啥这是可能的吗? [复制]

有人可以向我解释为啥我的 django 管理主题是黑暗的吗?

有人可以向我解释一下:'create(email: emailArg = ) '吗?

有人可以向我解释 asp.net 路由语法吗?

有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?