[java] 정수의 최대 값

C에서 정수 (32 비트 시스템의 경우)는 32 비트이며 범위는 -32,768에서 +32,767입니다. Java에서 정수 (long)도 32 비트이지만 범위는 -2,147,483,648에서 +2,147,483,647입니다.

비트 수는 동일하지만 Java에서 범위가 어떻게 다른지 이해하지 못합니다. 누군가 이것을 설명 할 수 있습니까?



답변

에서 C , 언어 자체가 특정 데이터 유형의 표현을 결정하지 않습니다. 시스템마다 다를 int수 있으며 임베디드 시스템에서는 너비가 16 비트 일 수 있지만 일반적으로 32 비트입니다.

유일한 요구 사항은 short int<= int<= long int크기입니다. 또한 int프로세서의 기본 용량을 나타내는 권장 사항이 있습니다.

모든 유형이 서명됩니다. unsigned수정하면 (그렇지 않으면 부호 비트를 위해 예약되어 있습니다) 값의 일부로서 가장 높은 비트를 사용할 수 있습니다.

가능한 데이터 유형에 가능한 값에 대한 간단한 표는 다음과 같습니다.

          width                     minimum                         maximum
signed    8 bit                        -128                            +127
signed   16 bit                     -32 768                         +32 767
signed   32 bit              -2 147 483 648                  +2 147 483 647
signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
unsigned  8 bit                           0                            +255
unsigned 16 bit                           0                         +65 535
unsigned 32 bit                           0                  +4 294 967 295
unsigned 64 bit                           0     +18 446 744 073 709 551 615

에서 자바 , Java 언어 사양은 데이터 유형의 표현을 결정한다.

순서는 byte8 비트, short16 비트, int32 비트, long64 비트입니다. 이러한 모든 유형은 signed 이며, 서명 되지 않은 버전은 없습니다. 그러나 비트 조작은 숫자를 부호가없는 것으로 처리합니다 (즉, 모든 비트를 올바르게 처리).

문자 데이터 유형 char은 너비가 16 비트이고 부호가 없으며 UTF-16 인코딩을 사용하여 문자를 보유합니다 (그러나 char유효하지 않은 문자 코드 포인트를 나타내는 임의의 부호없는 16 비트 정수 를 지정할 수 있음)

          width                     minimum                         maximum

SIGNED
byte:     8 bit                        -128                            +127
short:   16 bit                     -32 768                         +32 767
int:     32 bit              -2 147 483 648                  +2 147 483 647
long:    64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807

UNSIGNED
char     16 bit                           0                         +65 535


답변

C에서 정수 (32 비트 시스템)는 32 비트이며 범위는 -32768에서 +32767입니다.

잘못된. 2의 보수 표현에 32 비트 정수의 범위가 -2 31 2 31 -1 2,147,483,647 -2,147,483,648 동일하다.


답변

32 비트 정수 범위는 -2,147,483,648에서 2,147,483,647입니다. 그러나 32 비트 시스템을 C사용 한다고해서 컴파일러가 32 비트 정수를 사용 한다는 것은 아닙니다 .


답변

C 언어 정의 는 다양한 데이터 유형에 대한 최소 범위를 지정합니다 . 의 int경우이 최소 범위는 -32767 ~ 32767이며 너비가 16 비트 이상int 이어야합니다 . 구현은 더 넓은 범위를 갖는 더 넓은 유형을 자유롭게 제공 할 수있다 . 예를 들어, 내가 작업하는 SLES 10 개발 서버에서 범위는 -2147483647에서 2137483647입니다.int

16 비트 int유형 (All The World Is A VAX x86 은 아님) 을 사용하는 시스템이 여전히 있지만 32 비트 유형을 사용하는 시스템이 많고 64 비트를 사용하는 시스템 이 많이 있습니다 . int

C 언어는 다른 아키텍처에서 실행되도록 설계되었습니다. Java는 이러한 구조적 차이를 숨기는 가상 머신에서 실행되도록 설계되었습니다.


답변

Java와 동등한 int것은 long intC입니다.

편집 : int32_t정의 된 경우 정밀도 측면에서 동등합니다. 크기는 32 비트 이상이어야하므로 long intjava의 정밀도를 보장합니다 int.


답변

32 비트 머신의 C-정수는 32 비트가 그것을 저장하는 데 사용된다는 것을 의미하지 않기 때문에 16 비트 일 수도 있습니다. 기계에 따라 다릅니다 (구현에 따라 다름).


답변

포스터에는 자바 유형이 섞여 있습니다. 자바에서 그의 C in은 짧습니다 : short (16 bit) = -32768 ~ 32767 int (32 bit) = -2,147,483,648 ~ 2,147,483,647

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html