我可以通过在值上附加L来创建文字长度;为什么我不能以某种类似的方式创建文字短或字节?为什么我需要使用带有强制转换的int文字?
如果答案是“因为C中没有短文字”,那么为什么C中没有短文字?
这实际上并没有以任何有意义的方式影响我的生活;写(短)0而不是0S或其他东西很容易。但这种不一致让我很好奇;这是你晚上睡觉时困扰你的事情之一。有人在某个时候做出了一个设计决定,可以为某些原始类型输入文字,但不能为所有原始类型输入文字。为什么呢?
答案 0 :(得分:15)
在C中,int
至少意味着拥有CPU的“自然”字大小,long
可能意味着“更大的自然”字大小(最后不确定)部分,但它也解释了为什么int
和long
在x86上具有相同的大小。)
现在,我的猜测是:对于int
和long
,有一个完全适合机器寄存器的自然表示。但是,在大多数CPU上,较小的byte
和short
类型必须在使用之前填充到int
。如果是这样的话,你也可以有演员。
答案 1 :(得分:8)
我怀疑这是“除非真正增加价值,否则不要在语言中添加任何东西” - 并且它被视为增加了足够的价值而不值得。正如你所说的那样,很容易实现,坦率地说,无论如何都很少需要(仅限消除歧义)。
在C#中也是如此,我从来没有特别错过任何一种语言。我在Java中错过的是无符号字节类型:)
答案 2 :(得分:4)
另一个原因可能是JVM不知道short和byte。所有计算和存储都是使用JVM内的整数,长整数,浮点数和双精度进行的。
答案 3 :(得分:2)
有几件事需要考虑。
1)如上所述,JVM没有字节或短类型的概念。通常这些类型不用于JVM级别的计算;所以人们可以认为这些文字的使用会更少。
2)对于字节和短变量的初始化,如果int表达式是常量并且在类型的允许范围内,则它被隐式地转换为目标类型。
3)总是可以施放文字,前(短)10