문제

L을 값에 추가하여 리터럴 오랫동안을 만들 수 있습니다. 비슷한 방식으로 문자 그대로 또는 바이트를 만들 수없는 이유는 무엇입니까? 캐스트와 함께 문자 그대로 사용해야하는 이유는 무엇입니까?

그리고 대답이 "C에 짧은 문자가 없기 때문에"라면 왜 C에 짧은 문자가 없습니까?

이것은 실제로 어떤 의미있는 방식으로 내 인생에 영향을 미치지 않습니다. 0 등 대신 0을 쓰기 쉽습니다. 그러나 불일치는 나를 호기심을 느낀다. 늦은 밤에 일어나면 당신을 괴롭히는 것들 중 하나입니다. 어느 시점에서 누군가는 일부 원시 유형의 일부에 대해 리터럴을 입력 할 수 있도록 설계 결정을 내 렸지만 모두에게는 그렇지 않았습니다. 왜요?

도움이 되었습니까?

해결책

C, int 적어도 CPU의 "자연적인"단어 크기를 갖기위한 것이며 long 아마도 "더 큰 자연적인"단어 크기 일 것입니다 (마지막 부분에서는 확실하지 않지만 그 이유도 설명 할 것입니다. int 그리고 long x86에서 동일한 크기를 갖습니다).

자, 내 추측은 다음과 같습니다 int 그리고 long, 기계의 레지스터에 정확히 맞는 자연스러운 표현이 있습니다. 그러나 대부분의 CPU에서는 작은 유형입니다 byte 그리고 short 패딩해야합니다 int 어쨌든 사용하기 전에. 이 경우 캐스트를 가질 수도 있습니다.

다른 팁

나는 그것이 "실제로 가치를 부여하지 않는 한 언어에 아무것도 추가하지 마십시오"라고 생각합니다. 그리고 그것은 가치가없는 가치가 충분하지 않은 것으로 보였습니다. 당신이 말했듯이, 둥글게되기 쉽고 솔직히 어쨌든 거의 필요하지 않습니다 (명확한 경우에만).

C#에서도 마찬가지이며, 어느 언어로든 특히 놓친 적이 없습니다. 내가 Java에서 놓친 것은 서명되지 않은 바이트 유형입니다 :)

또 다른 이유는 JVM이 Short and Byte에 대해 알지 못하기 때문일 수 있습니다. 모든 계산 및 저장은 JVM 내부의 Ints, Longs, Floats 및 Doubles로 수행됩니다.

고려해야 할 몇 가지 사항이 있습니다.

1) 위에서 논의 된 바와 같이 JVM은 바이트 또는 짧은 유형의 개념이 없습니다. 일반적으로 이러한 유형은 JVM 수준에서 계산에 사용되지 않습니다. 따라서이 리터럴의 사용이 적을 것이라고 생각할 수 있습니다.

2) 바이트 및 짧은 변수의 초기화를 위해, int 표현식이 일정하고 허용 유형의 범위에서는 대상 유형에 암시 적으로 캐스팅됩니다.

3) 항상 문자 그대로 캐스팅 할 수 있습니다. (짧은) 10

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top