我可以通过将L附加到值来创建文字长;为什么我不能以某种类似的方式创建文字短或字节?为什么我需要在转换的时候使用int文本?
如果答案是“因为C中没有短文字”,那么为什么C中没有短文字呢?
这实际上不会以任何有意义的方式影响我的生活;写(短)0而不是0或其他东西很容易。但是这种不一致让我很好奇;这是当你晚上睡得很晚的时候会困扰你的事情之一。在某种程度上,有人做出了一个设计决定,使得可以为一些原始类型输入文字,但不是所有原始类型。为什么?
发布于 2008-11-25 16:09:45
在C语言中,int
至少意味着具有CPU的“自然”字长,而long
可能意味着“更大的自然”字长(后一部分不确定,但这也解释了为什么int
和long
在x86上具有相同的大小)。
现在,我的猜测是:对于int
和long
,有一个自然的表示形式,它完全适合机器的寄存器。然而,在大多数int
上,较小的类型byte
和short
在使用之前无论如何都必须填充到CPU中。如果是这样的话,你也可以有一个演员。
发布于 2008-11-25 16:02:26
我怀疑这是一个“不要给语言增加任何东西,除非它真的增加了价值”的情况-它被认为增加了足够少的价值,不值得这样做。正如您所说的,这很容易绕过,坦率地说,无论如何都没有必要这样做(只是为了消除歧义)。
在C#中也是如此,在这两种语言中我都没有错过它。我在Java中缺少的是一个无符号字节类型:)
发布于 2008-11-25 16:04:13
另一个原因可能是JVM不知道short和byte。所有的计算和存储都是在JVM中使用整型、长整型、浮点型和双精度型来完成的。
https://stackoverflow.com/questions/317816
复制相似问题