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 언어 사양은 데이터 유형의 표현을 결정한다.
순서는 byte
8 비트, short
16 비트, int
32 비트, long
64 비트입니다. 이러한 모든 유형은 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 int
C입니다.
편집 : int32_t
정의 된 경우 정밀도 측면에서 동등합니다. 크기는 32 비트 이상이어야하므로 long int
java의 정밀도를 보장합니다 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