맨위로가기

정수형

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

정수형은 컴퓨터에서 정수를 표현하는 데 사용되는 자료형으로, 부호 있는 정수와 부호 없는 정수로 구분된다. 부호 있는 정수는 음수, 0, 양수를 모두 표현하며, 2의 보수 방식을 사용하여 음수를 나타낸다. 부호 없는 정수는 0과 양수만 표현한다. 정수형은 비트 수에 따라 표현할 수 있는 값의 범위가 다르며, 프로그래밍 언어에 따라 다양한 크기의 정수 자료형을 제공한다. C, C++, Java, C#, Python 등 여러 프로그래밍 언어에서 정수형을 지원하며, 각 언어는 고정 길이 정수형과 가변 길이 정수형을 제공한다.

더 읽어볼만한 페이지

  • 원시 자료형 - 참조
    참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다.
  • 원시 자료형 - 문자열
    문자열은 사람이 읽을 수 있는 텍스트를 저장하고 정보를 전달하거나 받는 데 사용되는 순서가 있는 문자들의 시퀀스로, 다양한 형태의 데이터를 표현하며 유한한 길이를 가지고, 프로그래밍 언어에서 기본 또는 복합 자료형으로 제공되고, 문자 집합과 인코딩 방식에 따라 표현 방식이 달라진다.
  • 컴퓨터 산술 - IEEE 754
    IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다.
  • 컴퓨터 산술 - 1의 보수
    1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다.
  • 자료형 - 참조
    참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다.
  • 자료형 - 익명 함수
    익명 함수는 이름이 없는 함수로, 람다 추상, 람다 함수, 람다 표현식, 화살표 함수 등으로 불리며, 함수형 프로그래밍 언어에서 람다식 형태로 많이 사용되고 고차 함수의 인수, 클로저, 커링 등에 활용되지만, 재귀 호출의 어려움이나 기능 제한과 같은 단점도 존재한다.
정수형
기본 정보
여러 정수형의 일반적인 범위 비교
여러 정수형의 일반적인 범위 비교
종류기본형
표현부호 있는 정수
부호 없는 정수
일반적인 크기2 바이트
4 바이트
8 바이트
상세 정보
C#sbyte
byte
short
ushort
int
uint
long
ulong
char
C++signed char
unsigned char
short
unsigned short
int
unsigned int
long
unsigned long
long long
unsigned long long
wchar_t
char16_t
char32_t
자바byte
short
int
long
char
관련 주제
관련 주제부동소수점
자료형 (프로그래밍)
Boolean (자료형)

2. 종류

컴퓨터에서 사용되는 정수 자료형은 크게 부호 있는 정수와 부호 없는 정수로 나뉜다.[1]

정수형의 ''값''은 해당 항목이 나타내는 수학적 정수이다. 정수형은 음이 아닌 정수만 표현 가능한 ''부호 없는'' 유형 또는 음수도 표현 가능한 ''부호 있는'' 유형이 될 수 있다.

정수 값은 일반적으로 프로그램의 소스 코드에서 + 또는 − 부호를 선택적으로 앞에 붙인 일련의 숫자로 지정된다. 일부 프로그래밍 언어는 16진수(16진법) 또는 8진수(8진법)와 같은 다른 표기법을 허용하며, 숫자 그룹 구분 기호를 허용하는 경우도 있다.[2]

이 데이터의 ''내부 표현''은 컴퓨터의 메모리에 값이 저장되는 방식이다. 수학적 정수와 달리 컴퓨터의 일반적인 데이터는 최소값과 최대값을 갖는다. 양의 정수의 가장 일반적인 표현은 이진법을 사용하는 비트 문자열이다. 비트를 저장하는 메모리 바이트의 순서는 다양하다. (엔디안 참조) 정수형의 ''너비'', ''정밀도'' 또는 ''비트 크기''[3]는 표현의 비트 수이다.

부호 있는 숫자를 나타내는 방법에는 네 가지가 있는데, 가장 일반적인 방법은 2의 보수이다.

일부 컴퓨터 언어는 머신 독립적인 방식으로 정수 크기를 정의하고, 다른 언어는 기본 프로세서 워드 크기에 따라 다양한 정의를 갖는다. 하나의 프로그래밍 언어의 정수는 다른 언어나 프로세서, 또는 다른 비트 크기의 실행 컨텍스트에서 크기가 다를 수 있다.

일부 구형 컴퓨터 아키텍처는 2진화 십진법(BCD) 또는 기타 형식으로 저장된 정수의 십진수 표현을 사용했다.

비트 수이름범위 (부호 있는 숫자 표현에 2의 보수를 사용한다고 가정)십진수 자릿수용도C/C++C#파스칼 및 델파이자바SQL포트란D러스트
4니블, 반옥텟부호 있음: −8에서 7까지2진화 십진법, 단일 십진수
부호 없음: 0에서 15까지
8바이트, 옥텟, i8, u8부호 있음: −128에서 127까지ASCII 문자, UTF-8의 코드 단위int8_t, signed charsbyteShortintbytetinyintbytei8
부호 없음: 0에서 255까지uint8_t, unsigned charbyteByteunsigned tinyintubyteu8
16halfword, 워드, short, i16, u16부호 있음: −32,768에서 32,767까지UCS-2 문자, UTF-16의 코드 단위int16_t, shortshortSmallintshortsmallintshorti16
부호 없음: 0에서 65,535까지uint16_t, unsignedushortWordcharunsigned smallintushortu16
32워드, long, doubleword, longword, int, i32, u32부호 있음: −2,147,483,648에서 2,147,483,647까지UTF-32 문자, 알파 채널을 포함한 트루 컬러, FourCC, 32비트 컴퓨팅에서의 포인터int32_t, int, longintLongInt, Integerintintinti32
부호 없음: 0에서 4,294,967,295까지uint32_t, unsigned int, unsigned longuintLongWord, Cardinalunsigned intuintu32
64워드, doubleword, longword, long, long long, quad, quadword, qword, int64, i64, u64부호 있음: −9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지시간 (예: 유닉스 에포크 이후의 밀리초), 64비트 컴퓨팅에서의 포인터int64_t, long, long longlongInt64longbigintlongi64
부호 없음: 0에서 18,446,744,073,709,551,615까지uint64_t, unsigned long longulongUInt64, QWordunsigned bigintulongu64
128octaword, double quadword, i128, u128부호 있음: −170,141,183,460,469,231,731,687,303,715,884,105,728에서 170,141,183,460,469,231,731,687,303,715,884,105,727까지복잡한 과학적 계산, IPv6 주소, GUID비표준 또는 컴파일러 특정 확장으로만 사용 가능centi128
부호 없음: 0에서 340,282,366,920,938,463,463,374,607,431,768,211,455까지ucentu128
nn-비트 정수 (일반적인 경우)부호 있음: −(2n−1)에서 (2n−1 − 1)까지colspan="2" |C23: _BitInt(n), signed _BitInt(n)Ada: range -2(n-1)..2(n-1)-1
부호 없음: 0에서 (2n − 1)까지colspan="2" |C23: unsigned _BitInt(n)Ada: range 0..2n-1, mod 2n; 표준 라이브러리 또는 많은 언어 (예: Python, C++ 등)의 타사 임의 산술 라이브러리의 BigDecimal 또는 Decimal 클래스


2. 1. 부호 있는 정수 (Signed Integer)

음수, 0, 양수를 모두 표현할 수 있는 정수 자료형이다. 일반적으로 2의 보수 방식을 사용하여 음수를 표현한다.[1] 표현 범위는 -(2^(n-1))부터 2^(n-1)-1까지이다. (n은 비트 수)

2의 보수 연산은 표현과 값 사이에 완벽한 일대일 대응이 있고(특히 별도의 +0과 −0 없음) 덧셈, 뺄셈곱셈이 부호 있는 유형과 부호 없는 유형을 구별할 필요가 없기 때문에 편리하다. 다른 가능성으로는 바이어스 표현, 부호-크기, 1의 보수가 있다.

비트이름범위십진법 (대략값)이용C/C++C#델파이자바SQL
4nibble, semioctetSigned: -8 ~ 71binary-coded decimal, single decimal로 표현.colspan="5" rowspan="2" |
8byte, octetSigned: -128 ~ 1273아스키 문자int8_t, charsbyteShortintbytetinyint
16halfword, word, shortSigned: -32,768 ~ 32,7675UCS-2 문자int16_t, shortshortSmallintshortsmallint
32word, long, doubleword, longword, intSigned: -2,147,483,648 ~ 2,147,483,64710UCS-4 문자, 트루컬러 + 알파, FourCC, 액션스크립트 intint32_t, int, longintLongInt; Integerintint
64word, doubleword, longword, long long, quad, quadword, int64Signed: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,80719매우 큰 수int64_t, long, long longlongInt64longbigint
128octaword, double quadwordSigned: -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ 170,141,183,460,469,231,731,687,303,715,884,105,72739C: 비표준 컴파일러 확장으로만 사용 가능
nn-bit integer
(일반적인 경우)
Signed: (-2^(n-1)) ~ (2^(n-1) -1)\lceil (n-1) \log_{10}{2} \rceil에이다 `범위 -2(n-1)..2(n-1)-1`


2. 2. 부호 없는 정수 (Unsigned Integer)

Unsigned Integer영어는 0과 양수만을 표현할 수 있는 정수 자료형이다. 표현 범위는 0부터 2^n - 1까지이다. (n은 비트 수)[1]

다음은 부호 없는 정수형의 비트 수에 따른 표현 범위와 주요 용도를 나타낸 표이다.

비트이름범위십진법 (대략값)이용C/C++C#델파이자바SQL
4nibble, semioctet0 ~ 152binary-coded decimal, single decimal로 표현.
8byte, octet0 ~ 2553아스키 문자uint8_t, charbyteByten/aunsigned tinyint
16halfword, word, short0 ~ 65,5355UCS-2 문자uint16_tushortWordcharunsigned smallint
32word, long, doubleword, longword, int0 ~ 4,294,967,29510UCS-4 문자, 트루컬러 + 알파, FourCC, 액션스크립트 intuint32_tuintLongWord; Cardinaln/aunsigned int
64word, doubleword, longword, long long, quad, quadword, int640 ~ 18,446,744,073,709,551,61520매우 큰 수uint64_tulongn/an/aunsigned bigint
128octaword, double quadword0 ~ 340,282,366,920,938,463,463,374,607,431,768,211,45539C: 비표준 컴파일러 확장으로만 사용 가능
nn-bit integer
(일반적인 경우)
0 ~ 2^n - 1\lceil n \log_{10}{2} \rceil에이다 `범위 0..2n-1`, 에이다 `mod 2n`


2. 3. 고정 길이 및 가변 길이 정수

대부분의 프로그래밍 언어는 8비트, 16비트, 32비트, 64비트 등 특정 비트 수의 정수 자료형을 제공하는데, 이를 고정 길이 정수라고 한다. 이러한 자료형은 표현할 수 있는 정수의 범위에 제한이 있다. 예를 들어, 부호 없는 8비트 정수는 0부터 255까지, 부호 있는 8비트 정수는 -128부터 127까지의 값을 표현할 수 있다.[1] 2의 보수를 사용하면 n 비트의 부호 있는 정수형은 -2(n-1)부터 2(n-1) - 1까지의 숫자를 나타낼 수 있다.

일부 프로그래밍 언어는 임의의 크기를 가진 정수를 표현할 수 있는 자료형을 지원하는데, 이를 가변 길이 정수라고 한다. Python의 `int`와 Java의 `BigInteger`가 대표적이다. 이러한 자료형은 메모리가 허용하는 한 매우 큰 정수도 표현할 수 있어, 오버플로우 걱정 없이 연산할 수 있다.

다음은 일반적인 고정 길이 정수 자료형의 종류와 범위를 나타내는 표이다.

비트이름범위 (부호 있음)범위 (부호 없음)C/C++C#델파이자바SQL
4니블-8 ~ 70 ~ 15
8byte, octet-128 ~ 127[1]0 ~ 255[1]int8_t, charsbyteShortintbytetinyint
16halfword, word, short-32,768 ~ 32,7670 ~ 65,535int16_t, shortshortSmallintshortsmallint
32word, long, doubleword, longword, int-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295int32_t, int, longintLongInt; Integerintint
64word, doubleword, longword, long long, quad, quadword, int64-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,615int64_t, long, long longlongInt64longbigint
128octaword, double quadword-170,141,183,460,469,231,731,687,303,715,884,105,728 ~ 170,141,183,460,469,231,731,687,303,715,884,105,7270 ~ 340,282,366,920,938,463,463,374,607,431,768,211,455C: 비표준 컴파일러 확장으로만 사용 가능



C 언어와 C++에서는 `short`, `int`, `long` 등의 정수형을 제공하며, 각 자료형의 크기는 컴파일러와 플랫폼에 따라 다를 수 있다. C99/C++11 표준에서는 `int64_t`와 같이 비트 폭을 명시한 고정 폭 정수형을 도입하여 이식성을 높였다.[18] Java나 C#과 같은 언어는 처음부터 각 내장 정수형의 비트 폭과 내부 표현을 표준 사양으로 규정하고 있다.

3. 표현 방식

정수형의 값은 해당 항목이 나타내는 수학적 정수이다. 정수형은 음이 아닌 정수만 표현 가능한 '부호 없는' 유형과 음수도 표현 가능한 '부호 있는' 유형이 있다.[1]

정수 값은 프로그램의 소스 코드에서 + 또는 − 부호가 선택적으로 앞에 붙는 일련의 숫자로 지정된다. 16진법 또는 8진법과 같은 다른 표기법을 허용하는 프로그래밍 언어도 있으며, 숫자 그룹 구분 기호를 허용하는 경우도 있다.[2]

데이터의 내부 표현은 컴퓨터의 메모리에 값이 저장되는 방식이다. 수학적 정수와 달리 컴퓨터의 일반적인 데이터는 최소값과 최대값을 갖는다.

양의 정수의 가장 일반적인 표현은 이진법을 사용하는 비트 문자열이다. 비트를 저장하는 메모리 바이트의 순서는 다양한데, 이는 엔디안을 참조하면 된다. 정수형의 너비, 정밀도 또는 비트 크기[3]는 표현의 비트 수이다. ''n'' 비트의 정수형은 2''n''개의 숫자를 인코딩할 수 있다. 예를 들어 부호 없는 유형은 일반적으로 0부터 2''n'' − 1까지의 음이 아닌 값을 나타낸다. 정수 값을 비트 패턴으로 인코딩하는 다른 방법으로는 2진화 십진법, 그레이 코드가 사용되거나 ASCII와 같은 인쇄된 문자 코드로 사용되기도 한다.

현대 사용법에서 "바이트"는 거의 항상 8비트를 의미하며, 다른 모든 크기는 사용되지 않기 때문에 "바이트"는 "옥텟"과 동의어가 되었다.

3. 1. 2의 보수 (Two's Complement)

대부분의 컴퓨터 시스템에서 부호 있는 정수를 표현하는 데 사용되는 방식이다. 최상위 비트(MSB)가 부호를 나타내며, 0은 양수, 1은 음수를 의미한다.[1] 음수는 해당 양수의 2의 보수를 취하여 표현한다. 2의 보수를 사용하면 덧셈, 뺄셈 연산을 간단하게 처리할 수 있다.[1]

2의 보수는 ''n'' 비트의 부호 있는 정수형이 -2(''n''-1)부터 2(''n''-1) - 1까지의 숫자를 나타낼 수 있게 한다. 2의 보수 연산은 표현과 값 사이에 완벽한 일대일 대응이 있고(특히 별도의 +0과 -0 없음) 덧셈, 뺄셈곱셈이 부호 있는 유형과 부호 없는 유형을 구별할 필요가 없기 때문에 편리하다. 이진 컴퓨팅 시스템에서 부호 있는 숫자를 나타내는 방법에는 2의 보수 외에도 바이어스 표현, 부호-크기, 1의 보수가 있다.[1]

3. 2. 기타 표현 방식

부호 있는 숫자를 나타내는 방법에는 여러 가지가 있다. 일반적인 방법은 2의 보수인데, 이를 통해 ''n'' 비트의 부호 있는 정수형이 -2(''n''-1)부터 2(''n''-1) - 1까지의 숫자를 나타낼 수 있다. 2의 보수 연산은 표현과 값 사이에 일대일 대응이 있고(특히 별도의 +0과 -0 없음) 덧셈, 뺄셈곱셈이 부호 있는 유형과 부호 없는 유형을 구별할 필요가 없기 때문에 편리하다.[1] 다른 가능성으로는 바이어스 표현, 부호-크기, 1의 보수가 있다.[3]

  • 부호-크기 (Sign-Magnitude): 최상위 비트를 부호 비트로 사용하고 나머지 비트로 크기를 나타내는 방식이다.
  • 1의 보수 (Ones' Complement): 양수의 모든 비트를 반전시켜 음수를 표현하는 방식이다.
  • 2진화 십진법(BCD, Binary-Coded Decimal): 4개의 비트를 사용하여 십진수 한 자리를 표현하는 방식이다. 일부 구형 컴퓨터 아키텍처는 BCD 또는 기타 형식으로 저장된 정수의 십진수 표현을 사용했다.

4. 범위

정수 자료형의 범위는 사용하는 비트 수에 따라 결정된다. 다음은 일반적인 정수 자료형의 범위이다.

비트 수이름범위 (2의 보수 사용)십진수 자릿수용도
4니블, 반옥텟부호 있음: −8 ~ 72진화 십진법, 단일 십진수 표현
부호 없음: 0 ~ 15
8바이트, 옥텟부호 있음: −128 ~ 127ASCII 문자, UTF-8의 코드 단위
부호 없음: 0 ~ 255
16halfword, 워드, short부호 있음: −32,768 ~ 32,767UCS-2 문자, UTF-16의 코드 단위
부호 없음: 0 ~ 65,535
32워드, long, doubleword, longword, int부호 있음: −2,147,483,648 ~ 2,147,483,647UTF-32 문자, 알파 채널을 포함한 트루 컬러, FourCC, 32비트 컴퓨팅에서의 포인터
부호 없음: 0 ~ 4,294,967,295
64워드, doubleword, longword, long long, quad, quadword부호 있음: −9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807유닉스 에포크 이후의 밀리초, 64비트 컴퓨팅에서의 포인터
부호 없음: 0 ~ 18,446,744,073,709,551,615
128octaword, double quadword부호 있음: −170,141,183,460,469,231,731,687,303,715,884,105,728 ~ 170,141,183,460,469,231,731,687,303,715,884,105,727복잡한 과학적 계산, IPv6 주소, GUID
부호 없음: 0 ~ 340,282,366,920,938,463,463,374,607,431,768,211,455
nn-비트 정수 (일반적인 경우)부호 있음: −(2n−1) ~ (2n−1 − 1)rowspan="2" |
부호 없음: 0 ~ (2n − 1)

[1]

5. 프로그래밍 언어별 정수 자료형

(일반적인 경우)Signed: (-2^{n-1}) ~ (2^{n-1} -1)\lceil (n-1) \log_{10}{2} \rceil에이다 range -2(n-1)..2(n-1)-1Unsigned: 0 ~ (2^{n}-1)\lceil n \log_{10}{2} \rceil



일반적으로 하드웨어는 부호 있는 형식과 부호 없는 형식을 모두 지원하지만, 너비는 작고 고정된 집합이다. 고급 프로그래밍 언어는 더 많은 가능성을 제공하는데, 최대 하드웨어 지원 형식보다 두 배의 비트를 갖는 '더블 너비' 정수형이 있는 것이 일반적이다. 많은 언어에는 ''비트 필드'' 형식 (지정된 비트 수, 일반적으로 최대 하드웨어 지원 너비보다 작게 제한됨)과 ''범위'' 형식 (지정된 범위의 정수만 표현할 수 있음)이 있다.

Lisp, Smalltalk, REXX, Haskell, 파이썬, Raku와 같은 일부 언어는 ''임의 정밀도'' 정수 (''무한 정밀도 정수'' 또는 ''bignums''라고도 함)를 지원한다.

부울 또는 플래그 유형은 0과 1, 일반적으로 각각 ''거짓''과 ''참''의 두 값만 나타낼 수 있는 형식이다. 이 형식은 단일 비트를 사용하여 메모리에 저장할 수 있지만 주소 지정의 편의성과 접근 속도를 위해 종종 전체 바이트가 제공된다.

5. 1. C/C++

C/C++ 언어는 `char`, `int`, `long` 등의 키워드를 사용하여 정수형을 구현한다. C 언어는 CPU의 장점을 살려 기계어로 컴파일되기 때문에 CPU의 데이터 처리 비트와 부호를 다양하게 반영하며, 이를 위해 다양한 키워드를 제공한다.

`char`을 사용한 정수형은 1바이트로 고정되지만, `int`는 CPU마다 다른 비트 수를 가진다. 따라서 개발자는 사용하는 CPU와 컴파일러의 사양을 확인하여 비트 수를 인식해야 한다.
8비트 CPU의 일반적인 처리 비트 수

자료형비트 수
`char`8비트
`int`16비트
`long int`32비트


32비트 CPU의 일반적인 처리 비트 수

자료형비트 수
`char`8비트
`short`16비트
`int`32비트
`long long`64비트


정수형 부호 지정



C99 및 C++11부터는 `int8_t`, `uint16_t` 등 고정 폭 정수 자료형도 지원한다.

C/C++ 정수 자료형
비트 수이름범위 (부호 있는 숫자 표현에 2의 보수를 사용한다고 가정)C/C++
8바이트, 옥텟부호 있음: −128에서 127까지`int8_t`, `signed char`
부호 없음: 0에서 255까지`uint8_t`, `unsigned char`
16halfword, 워드, short부호 있음: −32,768에서 32,767까지`int16_t`, `short`
부호 없음: 0에서 65,535까지`uint16_t`
32워드, long, doubleword, longword, int부호 있음: −2,147,483,648에서 2,147,483,647까지`int32_t`, `int`, `long`
부호 없음: 0에서 4,294,967,295까지`uint32_t`, `unsigned int`, `unsigned long`
64워드, doubleword, longword, long, long long, quad, quadword, qword, int64부호 있음: -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지`int64_t`, `long`, `long long`
부호 없음: 0에서 18,446,744,073,709,551,615까지`uint64_t`, `unsigned long long`
nn-비트 정수 (일반적인 경우)부호 있음: −(2n−1)에서 (2n−1 − 1)까지C23: `_BitInt(n)`, `signed _BitInt(n)`
부호 없음: 0에서 (2n − 1)까지C23: `unsigned _BitInt(n)`


5. 2. Java

자바C언어와 달리 특정 CPU에 맞춰 컴파일되지 않고, 모든 CPU에서 실행 가능한 바이트코드 형태의 중간 실행 파일을 생성한다. C언어가 CPU에 따라 정수형 비트 수를 다르게 사용하는 반면, 자바는 가상 머신(VM)을 통해 해석 및 실행되므로 정수형 비트 수를 다르게 할 필요가 없다. 이는 C/C++에서 정수 실행이 기계어를 통해 ALU와 연관되어 실행되는 것과 대조적이다.

;자바 고유의 정수 비트 수

C언어가 `int`를 CPU에 따라 16비트 또는 32비트로 사용하는 것과 달리, 자바는 32비트를 사용하므로 C언어보다 편리하다. 정수 부호 처리는 2의 보수를 사용하며, 이는 C언어와 동일하다.

자바에서 `char` 변수는 16비트 유니코드(UNICODE)를 처리하므로 C/C++의 `char`와 혼동해서는 안 된다.

비트 수이름범위 (부호 있는 숫자 표현에 2의 보수를 사용한다고 가정)용도
8byte−128 ~ 127ASCII 문자, UTF-8의 코드 단위
16short−32,768 ~ 32,767UCS-2 문자, UTF-16의 코드 단위
32int−2,147,483,648 ~ 2,147,483,647UTF-32 문자, 알파 채널을 포함한 트루 컬러, FourCC, 32비트 컴퓨팅에서의 포인터
64long−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807시간 (예: 유닉스 에포크 이후의 밀리초), 64비트 컴퓨팅에서의 포인터



Java는 당초 유니코드 1.0을 도입하여 `char`형을 UCS-2를 표현하는 16비트 형으로 설계했다. 그러나 유니코드 2.0(1996년)에서 도입된 서로게이트 페어 때문에 1 문자에 `char` 2개를 소비하는 경우가 발생하게 되었다.

5. 3. C#

C#은 `sbyte`, `byte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong` 등 다양한 정수 자료형을 제공한다. 이 중 `sbyte`, `short`, `int`, `long`은 부호 있는 정수형을 나타내며, 음수와 양수 값을 모두 표현할 수 있다. 반면 `byte`, `ushort`, `uint`, `ulong`은 부호 없는 정수형으로, 0과 양수 값만 표현 가능하다.

비트 수이름범위 (부호 있는)범위 (부호 없는)C# 자료형
8byte, octet-128 ~ 1270 ~ 255`sbyte` (부호 있는), `byte` (부호 없는)
16halfword, word, short-32,768 ~ 32,7670 ~ 65,535`short` (부호 있는), `ushort` (부호 없는)
32word, long, doubleword, longword, int-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295`int` (부호 있는), `uint` (부호 없는)
64word, doubleword, longword, long long, quad, quadword, int64-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,615`long` (부호 있는), `ulong` (부호 없는)


5. 4. Python

파이썬은 `int` 자료형 하나만 제공하며, 이는 임의 정밀도 정수를 지원한다.[6] Python 3부터는 정수형과 long 정수형이 통합되어, 매우 큰 숫자도 자유롭게 다룰 수 있다. 예를 들어 1킬로바이트의 메모리를 사용하면 최대 2466자리의 십진수를 저장할 수 있을 만큼 큰 수를 지원한다.

5. 5. 기타 언어

자바스크립트는 Number 자료형을 통해 부동 소수점 수와 정수를 모두 처리한다.[6] SQL에서는 `tinyint`, `smallint`, `int`, `bigint` 등 다양한 크기의 정수 자료형을 제공한다.[4][5]

6. 한국의 IT 환경과 정수 자료형

과거 한국에서는 16비트 운영체제와 컴파일러를 사용하는 경우가 많아 `int` 자료형이 16비트로 처리되는 경우가 있었다. 이는 해외에서 개발된 프로그램과의 호환성 문제를 야기하기도 했다. 그러나 현재는 대부분의 시스템이 32비트 또는 64비트 환경으로 전환되었으며, `int` 자료형은 일반적으로 32비트로 처리된다.

유니코드의 도입과 함께, 한글을 포함한 다국어 문자를 처리하기 위해 16비트 이상의 정수 자료형(예: Java의 `char`)을 사용하는 경우가 많다. Java는 초기 유니코드 1.0을 도입하여 `char`형을 UCS-2를 표현하는 16비트 형으로 하였으나, 이후 유니코드 2.0에서 도입된 서로게이트 페어 때문에 1 문자에 `char` 2개를 소비하는 경우가 발생하게 되었다.

ASCII 문자 코드 체계에서는 7비트로 모든 문자를 표현할 수 있으므로 1 문자를 1 바이트의 정수형으로 취급하는 것이 가능하다. 그러나 한국어 등 문자 종류가 많은 언어에서는 1 문자를 1 바이트로 표현하는 것이 불가능하며, 1 문자를 여러 바이트로 나타내는 부호화 방식(멀티바이트 인코딩)이 고안되었다.

C 언어의 `char`형은 메모리 어드레싱의 최소 단위를 나타내는 형으로, `sizeof(char)`는 항상 1이다. C/C++의 와이드 문자형 `wchar_t`는 길이가 `char` 이상이어야 하며, 인코딩에 대한 규정은 없다.

참조

[1] 웹사이트 Representation of numbers http://www.swarthmor[...] Swarthmore College 2011-09-11
[2] 웹사이트 A look at Java 7's new features - O'Reilly Radar http://radar.oreilly[...] Radar.oreilly.com 2011-09-02
[3] 서적 The Problem with Software: Why Smart Engineers Write Bad Code https://books.google[...] MIT Press 2018-10-23
[4] 웹사이트 Sybase Adaptive Server Enterprise 15.5: Exact Numeric Datatypes http://infocenter.sy[...]
[5] 웹사이트 MySQL 5.6 Numeric Datatypes http://dev.mysql.com[...]
[6] 웹사이트 BigInteger (Java Platform SE 6) http://download.orac[...] Oracle 2011-09-11
[7] 뉴스 Kernel Log: x32 ABI gets around 64-bit drawbacks http://www.h-online.[...] www.h-online.com 2011-09-13
[8] 웹사이트 ISO/IEC 9899:201x http://www.open-std.[...] open-std.org 2016-06-20
[9] 웹사이트 ISO/IEC 9899:201x http://www.open-std.[...] open-std.org 2016-06-20
[10] 웹사이트 Fundamental types in C++ http://cppreference.[...] cppreference.com 2010-12-05
[11] 웹사이트 Chapter 8.6.2 on page 12 http://www.ecma-inte[...] ecma-international.org
[12] 문서 VB 6.0 help file
[13] 웹사이트 The Integer, Long, and Byte Data Types (VBA) http://msdn2.microso[...] microsoft.com 2006-12-19
[14] 웹사이트 The ANSI Standard: A Summary for the C Programmer http://www.ericgigue[...] 1987-12-18
[15] 웹사이트 American National Standard Programming Language C specifies the syntax and semantics of programs written in the C programming language. http://flash-gordon.[...]
[16] 웹사이트 ECMAScript 6th Edition draft https://people.mozil[...] 2013-12-16
[17] 웹사이트 第6回 整数型の内部表現 | 株式会社きじねこ https://web.archive.[...]
[18] 웹사이트 int8_t - cpprefjp C++日本語リファレンス https://cpprefjp.git[...]
[19] 웹사이트 符号付き整数型が2の補数表現であることを規定 - cpprefjp C++日本語リファレンス https://cpprefjp.git[...]
[20] 웹사이트 C23 - cppreference.com https://en.cpprefere[...]
[21] 웹사이트 ISO/IEC 9899:yyyy - n2346.pdf https://www.open-std[...]
[22] 웹사이트 C++ International Standard - n3337.pdf https://www.open-std[...]
[23] 웹사이트 Windows Data Types (BaseTsd.h) - Win32 apps | Microsoft Learn https://learn.micros[...]
[24] 웹사이트 列挙型 - C# リファレンス - C# | Microsoft Learn https://learn.micros[...]
[25] 웹사이트 INT36-C. ポインタから整数への変換、整数からポインタへの変換 https://www.jpcert.o[...]
[26] 웹사이트 64ビットになると何が変わる?――64ビットプログラミングのデータモデル (2/2) https://www.itmedia.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com