C에서 정수 (32 비트 시스템의 경우)는 32 비트이며 범위는 -32,768에서 +32,767입니다. Java에서 정수 (long)도 32 비트이지만 범위는 -2,147,483,648에서 +2,147,483,647입니다.
비트 수는 동일하지만 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 언어 사양은 데이터 유형의 표현을 결정한다.
순서는 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
int
.
int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));
인쇄물 2147483648
과 문자 는 부호가없는 유형입니다
Integer.MAX_VALUE + 1
는 0x80000000
오버플로로 인해 16 진입니다 (및 같음 Integer.MIN_VALUE
). 부호없는 (길게)으로 변환하면 부호 비트는 값 비트처럼 취급되므로 2147483648
. char
메모 주셔서 감사합니다 . char
서명되지 않았습니다. 맞습니다. 그러나 char은 실제로 계산에 사용되지 않으므로 목록에서 제외했습니다.
C에서 정수 (32 비트 시스템)는 32 비트이며 범위는 -32768에서 +32767입니다.
잘못된. 2의 보수 표현에 32 비트 정수의 범위가 -2 31 2 31 -1 2,147,483,647 -2,147,483,648 동일하다.
**
으며 C조차도 아니고 내 의견으로는 명확하지 않습니다. :)
^
보통이기 때문에 피 하십시오xor
32 비트 정수 범위는 -2,147,483,648에서 2,147,483,647입니다. 그러나 32 비트 시스템을 C
사용 한다고해서 컴파일러가 32 비트 정수를 사용 한다는 것은 아닙니다 .
int
기계의 자연 너비 "라고 말하며 32 비트 기계에 대해 컴파일 할 때 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는 이러한 구조적 차이를 숨기는 가상 머신에서 실행되도록 설계되었습니다.
INT_MIN
로 지정됩니다 -32767
. 2의 보수를 가정하지 마십시오.
32 비트 머신의 C-정수는 32 비트가 그것을 저장하는 데 사용된다는 것을 의미하지 않기 때문에 16 비트 일 수도 있습니다. 기계에 따라 다릅니다 (구현에 따라 다름).
int
. 그러나 limits.h
정확한 진실을 찾는 데 도움이됩니다
포스터에는 자바 유형이 섞여 있습니다. 자바에서 그의 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
__int32의 C 범위는 –2147483648 ~ 2147483647 입니다. 전체 범위는 여기를 참조하십시오.
unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647
특정 크기의 변수를 사용하려는 경우, 특히 비트 조작과 관련된 코드를 작성할 때 'int'가 32 비트 일 것이라는 보장은 없습니다. 'Standard Integer Types'를 사용해야합니다.
자바에서
int 데이터 형식은 32 비트 부호있는 2의 보수 정수입니다. 최소값은 -2,147,483,648이며 최대 값은 2,147,483,647입니다 (포함).
실제로 이해하는 것은 간단합니다 .Google 계산기로 계산할 수도 있습니다. int에 32 비트가 있고 컴퓨터는 이진이므로 비트 당 2 개의 값 (스팟)을 가질 수 있습니다. 2 ^ 32를 계산하면 4,294,967,296이됩니다. 따라서이 숫자를 2로 나누면 (그중 반은 음의 정수이고 다른 반은 양이기 때문에) 2,147,483,648을 얻습니다. 그리고이 숫자는 32 비트로 표현할 수있는 가장 큰 정수입니다.주의를 기울이면 2,147,483,648이 1,2,147,483,647보다 2,147,483,647보다 큽니다.이 숫자 중 하나가 0을 나타 내기 때문에 불행히도 2 ^ 32는 홀수가 아니므로 중간에 하나의 숫자 만 가지지 않으므로 양의 정수에는 암호가 하나 덜 있고 음수는 2,147,483,648의 절반을 얻습니다.
그리고 그게 다야. 언어가 아닌 기계에 따라 다릅니다.
int
하지 않습니다 . int
== 32 비트 부호, 2의 보수는 Java 언어 사양에 의해 정의되며 양극 처리 된 unobtainium 시트에 새겨 져 있습니다. (좋아요, 마지막 비트는 아닐 수도 있습니다.)
표준 C에서는 INT_MAX를 최대 'int'값으로 사용할 수 있습니다.이 상수는 "limits.h"에 정의되어야합니다. 언급 된 바와 같이 다른 상수들 ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ) 에도 비슷한 상수들이 정의되어 있습니다 .이 상수들은 구현에 따라 다르지만 최소 비트에 따라 최소값을가집니다 표준에 지정된대로 각 유형에 대해