2009-04-20 2 views
4

Java의 "write once, run anywhere"패러다임과 자바 튜토리얼이 모든 원시 데이터 유형에 명시적인 비트 크기를 제공한다는 점을 감안할 때 이것이 무엇이든간에 의존한다는 사실을 조금도 알지 못한다면 나는 그렇다, int은 항상 32 비트.Java에서 비트 연산의 기본 유형을 특정 크기로 가정하는 것이 안전합니까?

하지만주의해야 할 사항이 있습니까? language spec은 값 범위를 정의하지만 내부 표현에 대해서는 아무 것도 말하지 않으며 아마도 그렇게해서는 안됩니다. 그러나 비트 단위의 연산을 수행하는 코드는 int이며 32 비트 너비를 가정합니다.이 코드가 모든 아키텍처에서 안전한지 궁금합니다..

이 유형의 질문에 대한 충분한 자료가 있습니까?

답변

13

Java 코드는 기본 아키텍처와 상관없이 int가 32 비트 인 것처럼 항상 작동합니다.

적분 종류 바이트 값 짧은, INT 길이이다 8 비트, 16 비트, 32 비트 : 본 명세서에서

도 표현에 대한 결정적인이다 a part 거기 64 비트 부호있는 2의 보수 정수 및 char 값은 UTF-16 코드 단위를 나타내는 16 비트 부호없는 정수입니다.

+0

스펙에서 더 많은 부분을 파고 나중에 추가 한 후에 견적을 발견했습니다. –

1

예, Java에는 sizeof 연산자가 없습니다. 자바에서 브루스 에켈 (Bruce Eckel)의 생각에 따르면

:

  • short : 16 비트
  • int : 32 비트
  • long : 64 비트

이 값은 변화하지 않는다 아키텍처 간.

1

당신은 또한 JVM specs 확인 할 수있다 : 자바의 기본 요소의 동작은 언어 사양에 완전하고 정확하게 지정하는 동안 각각의 비트 연산이는 오피 코드의 도착 (안전 보건법, IOR, 내려서, 등)

6

을, 하나가 주의 사항 : 64 비트 아키텍처에서는 int가 워드로 정렬 될 가능성이 있습니다. 즉, int 배열 (또는 64 비트가 아닌 기본 유형)이 32 비트 아키텍처보다 두 배의 메모리를 사용할 수 있음을 의미합니다.

-1

이미 좋은 대답이 있기 때문에 이것은 대답이 아닙니다. 그러나 나는 이것이 Java에 대한 이유이지만 C 나 C++에 대한 것이 아니라는 점을 지적했습니다. Java가 가상 컴퓨터로 컴파일된다는 것입니다. (Java VM 또는 JVM). JVM은 어떤 머신인지에 관계없이 동일한 바이트 코드를 실행하고 내부 구조가 같기 때문에 모든 머신의 기본 유형에 대해 동일한 크기를 갖는 것으로 보입니다. C 및 C++은 특정 동작을 모방하려고 시도하지 않았으며 다양한 시스템에서 프로세서 구현의 변덕을 겪었습니다.

+0

언어가 바이트 코드로 컴파일되는지 여부와 크로스 플랫폼 프리미티브 크기를 갖는지 여부는 독립적입니다. –

관련 문제