정수형
"오늘의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 char | sbyte | Shortint | byte | tinyint | byte | i8 | ||
부호 없음: 0에서 255까지 | uint8_t, unsigned char | byte | Byte | unsigned tinyint | ubyte | u8 | ||||||
16 | halfword, 워드, short, i16, u16 | 부호 있음: −32,768에서 32,767까지 | UCS-2 문자, UTF-16의 코드 단위 | int16_t, short | short | Smallint | short | smallint | short | i16 | ||
부호 없음: 0에서 65,535까지 | uint16_t, unsigned | ushort | Word | char | unsigned smallint | ushort | u16 | |||||
32 | 워드, long, doubleword, longword, int, i32, u32 | 부호 있음: −2,147,483,648에서 2,147,483,647까지 | UTF-32 문자, 알파 채널을 포함한 트루 컬러, FourCC, 32비트 컴퓨팅에서의 포인터 | int32_t, int, long | int | LongInt, Integer | int | int | int | i32 | ||
부호 없음: 0에서 4,294,967,295까지 | uint32_t, unsigned int, unsigned long | uint | LongWord, Cardinal | unsigned int | uint | u32 | ||||||
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 long | long | Int64 | long | bigint | long | i64 | ||
부호 없음: 0에서 18,446,744,073,709,551,615까지 | uint64_t, unsigned long long | ulong | UInt64, QWord | unsigned bigint | ulong | u64 | ||||||
128 | octaword, 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 | 비표준 또는 컴파일러 특정 확장으로만 사용 가능 | cent | i128 | ||||||
부호 없음: 0에서 340,282,366,920,938,463,463,374,607,431,768,211,455까지 | ucent | u128 | ||||||||||
n | n-비트 정수 (일반적인 경우) | 부호 있음: −(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 |
---|---|---|---|---|---|---|---|---|---|
4 | nibble, semioctet | Signed: -8 ~ 7 | 1 | binary-coded decimal, single decimal로 표현. | colspan="5" rowspan="2" | | ||||
8 | byte, octet | Signed: -128 ~ 127 | 3 | 아스키 문자 | int8_t, char | sbyte | Shortint | byte | tinyint |
16 | halfword, word, short | Signed: -32,768 ~ 32,767 | 5 | UCS-2 문자 | int16_t, short | short | Smallint | short | smallint |
32 | word, long, doubleword, longword, int | Signed: -2,147,483,648 ~ 2,147,483,647 | 10 | UCS-4 문자, 트루컬러 + 알파, FourCC, 액션스크립트 int | int32_t, int, long | int | LongInt; Integer | int | int |
64 | word, doubleword, longword, long long, quad, quadword, int64 | Signed: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 19 | 매우 큰 수 | int64_t, long, long long | long | Int64 | long | bigint |
128 | octaword, double quadword | Signed: -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 | 39 | C: 비표준 컴파일러 확장으로만 사용 가능 | |||||
n | n-bit integer (일반적인 경우) | Signed: (-2^(n-1)) ~ (2^(n-1) -1) | 에이다 `범위 -2(n-1)..2(n-1)-1` |
2. 2. 부호 없는 정수 (Unsigned Integer)
Unsigned Integer영어는 0과 양수만을 표현할 수 있는 정수 자료형이다. 표현 범위는 0부터 까지이다. (n은 비트 수)[1]다음은 부호 없는 정수형의 비트 수에 따른 표현 범위와 주요 용도를 나타낸 표이다.
비트 | 이름 | 범위 | 십진법 (대략값) | 이용 | C/C++ | C# | 델파이 | 자바 | SQL |
---|---|---|---|---|---|---|---|---|---|
4 | nibble, semioctet | 0 ~ 15 | 2 | binary-coded decimal, single decimal로 표현. | |||||
8 | byte, octet | 0 ~ 255 | 3 | 아스키 문자 | uint8_t, char | byte | Byte | n/a | unsigned tinyint |
16 | halfword, word, short | 0 ~ 65,535 | 5 | UCS-2 문자 | uint16_t | ushort | Word | char | unsigned smallint |
32 | word, long, doubleword, longword, int | 0 ~ 4,294,967,295 | 10 | UCS-4 문자, 트루컬러 + 알파, FourCC, 액션스크립트 int | uint32_t | uint | LongWord; Cardinal | n/a | unsigned int |
64 | word, doubleword, longword, long long, quad, quadword, int64 | 0 ~ 18,446,744,073,709,551,615 | 20 | 매우 큰 수 | uint64_t | ulong | n/a | n/a | unsigned bigint |
128 | octaword, double quadword | 0 ~ 340,282,366,920,938,463,463,374,607,431,768,211,455 | 39 | C: 비표준 컴파일러 확장으로만 사용 가능 | |||||
n | n-bit integer (일반적인 경우) | 0 ~ | 에이다 `범위 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 ~ 7 | 0 ~ 15 | |||||
8 | byte, octet | -128 ~ 127[1] | 0 ~ 255[1] | int8_t, char | sbyte | Shortint | byte | tinyint |
16 | halfword, word, short | -32,768 ~ 32,767 | 0 ~ 65,535 | int16_t, short | short | Smallint | short | smallint |
32 | word, long, doubleword, longword, int | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 | int32_t, int, long | int | LongInt; Integer | int | int |
64 | word, doubleword, longword, long long, quad, quadword, int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 | int64_t, long, long long | long | Int64 | long | bigint |
128 | octaword, 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 | 0 ~ 340,282,366,920,938,463,463,374,607,431,768,211,455 | C: 비표준 컴파일러 확장으로만 사용 가능 |
정수형의 값은 해당 항목이 나타내는 수학적 정수이다. 정수형은 음이 아닌 정수만 표현 가능한 '부호 없는' 유형과 음수도 표현 가능한 '부호 있는' 유형이 있다.[1]
C 언어와 C++에서는 `short`, `int`, `long` 등의 정수형을 제공하며, 각 자료형의 크기는 컴파일러와 플랫폼에 따라 다를 수 있다. C99/C++11 표준에서는 `int64_t`와 같이 비트 폭을 명시한 고정 폭 정수형을 도입하여 이식성을 높였다.[18] Java나 C#과 같은 언어는 처음부터 각 내장 정수형의 비트 폭과 내부 표현을 표준 사양으로 규정하고 있다.
3. 표현 방식
정수 값은 프로그램의 소스 코드에서 + 또는 − 부호가 선택적으로 앞에 붙는 일련의 숫자로 지정된다. 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]
4. 범위
정수 자료형의 범위는 사용하는 비트 수에 따라 결정된다. 다음은 일반적인 정수 자료형의 범위이다.
비트 수 | 이름 | 범위 (2의 보수 사용) | 십진수 자릿수 | 용도 |
---|---|---|---|---|
4 | 니블, 반옥텟 | 부호 있음: −8 ~ 7 | 2진화 십진법, 단일 십진수 표현 | |
부호 없음: 0 ~ 15 | ||||
8 | 바이트, 옥텟 | 부호 있음: −128 ~ 127 | ASCII 문자, UTF-8의 코드 단위 | |
부호 없음: 0 ~ 255 | ||||
16 | halfword, 워드, short | 부호 있음: −32,768 ~ 32,767 | UCS-2 문자, UTF-16의 코드 단위 | |
부호 없음: 0 ~ 65,535 | ||||
32 | 워드, long, doubleword, longword, int | 부호 있음: −2,147,483,648 ~ 2,147,483,647 | UTF-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 | ||||
128 | octaword, 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 | ||||
n | n-비트 정수 (일반적인 경우) | 부호 있음: −(2n−1) ~ (2n−1 − 1) | rowspan="2" | | |
부호 없음: 0 ~ (2n − 1) |
5. 프로그래밍 언어별 정수 자료형
(일반적인 경우)
range -2(n-1)..2(n-1)-1