정수(컴퓨터 과학)

Integer (computer science)

컴퓨터 과학에서, 정수는 수학 정수의 범위를 나타내는 데이터 유형인 적분 데이터 유형기준입니다.적분 데이터 유형은 크기가 다를 수 있으며 음수 값을 포함할 수도 있고 포함할 수도 없습니다.정수는 일반적으로 컴퓨터에서 이진수(비트)의 그룹으로 표시됩니다.그룹 크기가 다르므로 사용 가능한 정수 크기 집합은 컴퓨터 유형에 따라 다릅니다.컴퓨터 하드웨어는 거의 항상 프로세서 레지스터 또는 메모리 주소를 정수로 나타내는 방법을 제공합니다.

가치와 표현

적분 유형이 있는 항목의 은 해당 항목에 해당하는 수학 정수입니다.적분 유형은 부호 없음(음수가 아닌 정수만 나타낼 수 있음) 또는 부호 있음(음수가 아닌 정수도 나타낼 수 있음)[1]일 수 있습니다.

정수 값은 일반적으로 프로그램의 소스 코드에서 + 또는 -를 선택적으로 앞에 붙이는 일련의 숫자로 지정됩니다.일부 프로그래밍 언어에서는 16진수(베이스 16) 또는 8진수(베이스 8)와 같은 다른 표기를 사용할 수 있습니다.일부 프로그래밍 언어에서는 숫자 그룹 구분 [2]기호도 사용할 수 있습니다.

기준의 내부 표현은 값이 컴퓨터 메모리에 저장되는 방법입니다.수학 정수와 달리 컴퓨터의 일반적인 기준에는 가능한 최소값과 최대값이 있습니다.

정의 정수의 가장 일반적인 표현은 이진수 체계를 사용하는 비트 문자열입니다.비트를 저장하는 메모리바이트의 순서는 다릅니다.엔디안성을 참조해 주세요.적분형의 폭 또는 정밀도는 그 표현에 포함되는 비트 수입니다.n비트의 정수형은 2개의 숫자를 부호화할n 수 있습니다.예를 들어 부호 없는 유형은 일반적으로 음이 아닌 값 0 ~2-1을n 나타냅니다.비트 패턴에 대한 정수 값의 다른 인코딩(예: 이진 코드 10진수 또는 그레이 코드) 또는 ASCII 등의 인쇄 문자 코드)이 사용되는 경우가 있습니다.

바이너리 컴퓨팅 시스템에서 부호화된 숫자를 표현하는 방법에는 4가지가 있습니다.가장 일반적인 것은 2의 보수로, n비트의 부호화된 적분형이 -2(n−1) ~ 2-1의(n−1) 숫자를 나타낼 수 있습니다.2의 보완 산술은 표현과 값(특히 +0과 -0) 사이에 완벽한 일대일 대응이 있고 더하기, 빼기곱셈이 부호 있는 유형과 부호 없는 유형을 구분할 필요가 없기 때문에 편리하다.다른 가능성으로는 오프셋 바이너리, 부호 매그니튜드, 그리고 1개의 보수있다.

컴퓨터에 의존하지 않는 방법으로 정수 크기를 정의하는 컴퓨터 언어도 있고, 기본 프로세서 워드 크기에 따라 정의가 달라집니다.모든 언어 구현이 모든 정수 크기의 변수를 정의하는 것은 아니며, 정의된 크기는 특정 구현에서 구별되지 않을 수도 있습니다.하나의 프로그래밍 언어의 정수는 다른 언어 또는 다른 프로세서 상의 다른 크기일 수 있습니다.

공통 적분 데이터 유형

비트 이름. 범위(서명 2의 보완을 전제로 함 십진수 사용하다 실장
C/C++ C# 파스칼델파이 자바 SQL[a] 포트란 D
4 니블, 반축 서명: -8부터7까지, -(2)부터33 -2-1까지 0.9 이진 코드화된 소수점, 단일 소수점 표현
서명 없음:0 ~ 15로, 이는 2 - 14 1.2
8 바이트, 옥텟, i8, u8 서명: -128 ~127 、 - (27) ~27 - 1 2.11 ASCII 문자, UTF-8 문자 인코딩 코드 단위 int8_t, 부호 있는[b] 문자 바이트 쇼틴트 바이트 작은 구멍 정수(1) 바이트 i8
서명 없음:0 ~ 255로, 이는 2 - 1과 같습니다8. 2.41 uint8_t, 부호 없는[b] 문자 바이트 바이트 부호가 없는 작은 박하 u바이트 u8
16 하프워드, 워드, 쇼트, i16, u16 서명: -32,768 ~32,76715, -(2) ~2-115 4.52 UCS-2 문자, UTF-16 문자 부호화 코드 단위 int16_t, 쇼트[b][b], int 짧다 스몰인트 짧다 스몰인트 정수 (2) 짧다 i16
서명 없음:0 ~ 65,535로, 이는 2 - 1과16 같습니다. 4.82 uint16_t, 부호[b] 없음, 부호 없음[b] int ushort 단어 [c] 부호가 없는 소박함 ushort u16
32 word, long, doubleword, longword, int, i32, u32 서명: -2,147,483,648부터2,147,483,647까지, -(2)부터2-1까지3131 9.33 UTF-32 문자, 알파벳을 사용한 트루 컬러, FourCC, 32비트 컴퓨팅 포인터 int32_t, int[b], long[b] 인트 LongInt; 정수[d] 인트 인트 정수(4) 인트 i32
서명 없음:0 ~ 4,294,967,295 (232 - 1) 9.63 uint32_t, 부호[b] 없음, 부호[b] 없음 int, 부호[b] 없음 길이 설치하다 LongWord; DWord; 카디널[d] 부호 없는 int 설치하다 u32
64 워드, 더블워드, 롱워드, 롱, 쿼드, 쿼드워드, qword, int64, i64, u64 서명: -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지, -(2)부터63 -1까지63 18.96 시간(유닉스 시대 이후 밀리초), 64비트 컴퓨팅 포인터 int64_t, long[b], long[b], long Int64 비긴트 정수(8) i64
서명 없음:0 ~ 18,446,744,073,709,551,615 (2-1과 동일64) 19.27 uint64_t, 부호 없는길이[b] 하지 않다 UInt64, QWord 부호 없는 비긴트 하지 않다 u64
128 8진수, 더블 쿼드워드, 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로 -2127 ~1127 - 1 38.23 복잡한 과학적 계산,

IPv6 주소, GUID

C: 비표준 컴파일러 고유 확장자로만 사용 가능 정수(16) 센트[e] i128
서명 없음:0 ~ 340,282,366,920,938,463,463,374,607,431,768,211,455 (2-1과 동일128) 38.53 u센트[e] u128
n n비트 정수
(일반적인 경우)
서명n−1: -(2)~(2n−1 - 1) (n - 1) 로그10 2 Ada: 범위 -2**(n-1)..2**(n-1)-1
부호 없음: 0 ~ (2n - 1) n10 로그 2 에이다: 범위 0..2**n-1, mod 2**n: 표준 라이브러리 또는 서드파티 임의 산술 라이브러리의 BigDecimal 또는 Decimal 클래스(Python, C++ 등)

CPU마다 지원하는 통합 데이터 타입이 다릅니다.일반적으로 하드웨어는 서명된 유형과 서명되지 않은 유형을 모두 지원하지만 작은 고정 폭 세트만 지원합니다.

위의 표에 일반적인 프로세서가 하드웨어에서 지원하는 일체형 폭을 나타냅니다.고급 프로그래밍 언어는 더 많은 가능성을 제공합니다.일반적으로 하드웨어가 지원하는 가장 큰 타입의 2배의 비트를 가진 '더블 와이드' 적분 타입이 있습니다.또한 많은 언어에는 비트 필드 유형(지정된 비트 수, 일반적으로 하드웨어에서 지원되는 최대 폭보다 작도록 제한됨)과 범위 유형(지정 범위의 정수만 나타낼 수 있음)이 있습니다.

Lisp, Smalltalk, REXX, Haskell, PythonRaku와 같은 일부 언어는 임의 정밀 정수(무한 정밀 정수 또는 bignum이라고도 함)를 지원합니다.이 개념을 최상위 구조로서 지원하지 않는 다른 언어들은 Java의 BigInteger 클래스나 Perl의 "bigint" [5]패키지와 같이 작은 변수의 배열을 사용하여 매우 큰 숫자를 나타낼 수 있는 라이브러리를 가질 수 있습니다.이것들은 숫자를 저장하는데 필요한 만큼의 컴퓨터 메모리를 사용합니다.그러나 컴퓨터는 한정된 양의 저장공간만을 가지고 있기 때문에 수학 정수의 유한한 부분집합만을 나타낼 수 있습니다.이러한 방식은 매우 큰 숫자를 지원합니다.예를 들어 1킬로바이트의 메모리를 사용하여 최대 2466자리 10진수를 저장할 수 있습니다.

부울 또는 플래그 유형은 0과 1의 두 가지 값만 나타낼 수 있는 유형으로 보통 각각 false와 true로 식별됩니다.이 유형은 단일 비트를 사용하여 메모리에 저장할 수 있지만, 주소 지정의 편의성과 액세스 속도를 위해 종종 전체 바이트가 지정됩니다.

4비트 양은 니블(먹는 경우, 한입보다 작음) 또는 니블(단어 바이트의 형태로 말장난)이라고 합니다.1개의 니블은 16진수의 1자리 숫자에 대응하며, 1자리 숫자 또는 2진수의 10진수의 부호 코드를 포함합니다.

바이트 및 옥텟

바이트라는 용어는 처음에 '메모리의 주소 지정 가능한 최소 단위'를 의미했습니다.과거에는 5, 6, 7, 8 및9비트의 바이트가 모두 사용되었습니다.또한 개별 비트('비트 주소 지정 시스템')를 지정할 수 있거나 16비트 또는 32비트 수('워드 주소 지정 시스템')만 처리할 수 있는 컴퓨터도 있었습니다.바이트라는 용어는 보통 비트 및 워드 주소 지정 기계와 관련하여 전혀 사용되지 않았습니다.

옥텟이라는 용어는 항상8비트의 수량을 나타냅니다.이는 주로 바이트 이 다른 컴퓨터가 통신해야 하는 컴퓨터 네트워킹 분야에서 사용됩니다.

현대의 사용법에서 바이트는 거의 예외 없이 8비트를 의미하는데, 이는 다른 모든 크기가 사용되지 않게 되었기 때문입니다. 따라서 바이트는 옥텟과 동의어가 되었습니다.

단어

'word'라는 용어는 특정 아키텍처의 프로세서에 의해 동시에 처리되는 작은 비트 그룹에 사용됩니다.따라서 단어의 크기는 CPU에 따라 다릅니다.6비트, 8비트, 12비트, 16비트, 18비트, 24비트, 32비트, 36비트, 39비트, 40비트, 48비트, 60비트, 64비트 등 다양한 크기의 단어가 사용되고 있습니다.아키텍처이기 때문에 보통 워드의 크기는 호환성이 높은 CPU의 특성이 아니라 패밀리 내의 첫 번째 CPU에 의해 설정됩니다.롱워드, 더블워드, 쿼드워드, 하프워드단어에서 파생된 용어의 의미도 CPU와 [6]OS에 따라 달라집니다.

실제로 모든 새로운 데스크톱 프로세서는 64비트 워드를 사용할 수 있지만, 8비트 및 16비트 워드 크기의 임베디드 프로세서는 여전히 일반적입니다.36비트 워드 길이는 컴퓨터 초창기에 보편적이었다.

소프트웨어의 휴대성이 떨어지는 중요한 원인 중 하나는 모든 컴퓨터가 프로그래머가 사용하는 컴퓨터와 동일한 크기의 단어를 가지고 있다는 잘못된 가정입니다.예를 들어, C 언어를 사용하는 프로그래머가 2-1보다15 큰 값을 저장하기 위해 사용되는 변수를 int로 잘못 선언하면 16비트 정수를 가진 컴퓨터에서는 프로그램이 실패합니다. 변수는 32비트 이상의 긴 값으로 선언되어야 합니다.또한 프로그래머는 포인터를 정보의 손실 없이 정수로 변환할 수 있다고 잘못 가정할 수 있습니다.이것은 (일부) 32비트 컴퓨터에서는 동작하지만 64비트 포인터와 32비트 정수가 있는 64비트 컴퓨터에서는 실패합니다. 문제는 다음 형식으로 stdint.h의 C99에 의해 해결되었습니다.intptr_t.

짧은 정수

짧은 정수는 같은 기계상의 표준 정수에 비해 저장공간이 적은 정수를 나타낼 수 있습니다.

C에서는 짧게 표시됩니다.최소 16비트가 필요하며 표준 정수보다 작은 경우가 많지만 [7][8]필수는 아닙니다.적합 프로그램은 -(2-115)[9][10]과 2-115 사이의 값을 안전하게 저장할 수 있다고 가정할 수 있지만 범위가 더 크지 않다고 가정할 수는 없습니다.Java에서 short는 항상 16비트 정수입니다.윈도우즈 API에서 SHORT 데이터 유형은 모든 [6]시스템에서 16비트 부호 있는 정수로 정의됩니다.

일반적인 짧은 정수 크기
프로그래밍 언어 data 유형명 서명성 크기(바이트) 최소값 최대값
C 및 C++ 짧다 서명된 2 - 32,767[f] +32,767
부호 없는 쇼트 서명되어 있지 않다 2 0 65,535
C# 짧다 서명된 2 −32,768 +32,767
ushort 서명되어 있지 않다 2 0 65,535
자바 짧다 서명된 2 −32,768 +32,767

긴 정수

정수는 같은 기계상의 표준 정수보다 크거나 같은 범위의 정수 전체를 나타낼 수 있습니다.

C에서는 long으로 표시됩니다.최소 32비트여야 하며 표준 정수보다 크거나 작을 수 있습니다.적합 프로그램은 -(2-131)[9][10]과 2-131 사이의 값을 안전하게 저장할 수 있다고 가정할 수 있지만 범위가 더 크지 않다고 가정할 수는 없습니다.

일반적인 긴 정수 크기
프로그래밍 언어 승인 유형 플랫폼 data 유형명 저장공간(바이트) 부호 범위 부호 없는 범위
C ISO/ANSI C99 국제 표준 UNIX, 16/32비트[6] 시스템
Windows, 16/32/64비트[6] 시스템
[g] 4
(요건 4)
- 2,196,483,647에서 +2,196,483,647로 0 ~ 4,294,967,295
(요건)
C ISO/ANSI C99 국제 표준 Unix,
64비트[6][8] 시스템
[g] 8
(요건 4)
- 9,223,372,036,854,775,807 ~ +9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615
C++ ISO/ANSI 국제 표준 Unix, Windows,
16/32비트 시스템
[g] 4개
(요건 4)
- 2,196,483,648에서 +2,196,483,647까지
0 ~ 4,294,967,295
(요건)
C++/CLI 국제 표준
ECMA-372
Unix, Windows,
16/32비트 시스템
[g] 4개
(요건 4)
- 2,196,483,648에서 +2,196,483,647까지
0 ~ 4,294,967,295
(요건)
VB 회사 표준 창문들 4개 - 2,196,483,648에서 +2,196,483,647까지
VBA 회사 표준 Windows, Mac OS X 4개 - 2,196,483,648에서 +2,196,483,647까지
SQL Server 회사 표준 창문들 BigInt 8 - 9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615
C#/ VB.NET ECMA 국제 표준 Microsoft.그물 또는 Int64 8 - 9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615
자바 국제/회사 표준 자바 플랫폼 8 - 9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807
파스칼 ? Windows, UNIX int64 8 - 9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615 (Qword 타입)

롱롱

C 프로그래밍 언어의 C99 버전과 C++C++11 버전에서는long long표준 최소 용량의 두 배가 지원되는 유형long 타입은 C++03에는 긴 타입이 존재하지 않기 때문에 C코드가 이전의 C++표준인 C++03에 준거해야 하는 컴파일러에서는 지원되지 않습니다.ANSI/ISO 준거 컴파일러의 경우 지정된 범위의 최소 요건(서명된63 경우 -(2-163)~[9]2-1, [10]서명되지 않은 경우 0~2-164)을 충족해야 합니다.다만, 이 범위를 확장할 [16][17]수 있습니다.이는 플랫폼 간에 코드와 데이터를 교환하거나 하드웨어에 직접 액세스할 때 문제가 될 수 있습니다.따라서 플랫폼에 의존하지 않는 정확한 폭 유형을 제공하는 여러 세트의 헤더가 있습니다.C 표준 라이브러리는 stdint를 제공합니다.h: 이것은 C99 및 C++11에서 도입되었습니다.

구문

정수의 리터럴은 아라비아 숫자(숫자 순서)로 구성되며 값 앞에 마이너스 기호가 표시되어 있습니다.그러나 대부분의 프로그래밍 언어에서는 숫자 그룹화에 쉼표나 공백을 사용할 수 없습니다.정수 리터럴의 예는 다음과 같습니다.

  • 42
  • 10000
  • -233000

많은 프로그래밍 언어로 정수 리터럴을 쓰는 방법에는 다음과 같은 몇 가지가 있습니다.

  • 대부분의 프로그래밍 언어, 특히 C의 영향을 받은 언어들은 정수 리터럴 앞에 다음과 같은 접두사를 붙입니다.0X또는0x예를 들어 16진수 값을 나타냅니다.0xDEADBEEF. 다른 언어에서는 다른 표기법을 사용할 수 있습니다. 예를 들어 일부 어셈블리 언어에는 다음과 같은 문자가 추가되어 있습니다.H또는h16진수 값의 끝까지를 지정합니다.
  • Perl, Ruby, Java, Julia, D, Go, Rust Python (버전 3.6 이후 버전)은 명확한 표시를 위해 내장된 밑줄을 허용합니다.10_000_000고정 형식 Fortran은 정수 리터럴에 포함된 공간을 무시합니다.
  • C 및 C++에서는 선두에 있는0은 8진수 값을 나타냅니다.0755이것은 주로 Unix 모드에서 사용하기 위한 것이지만, 일반 정수도 [18]0으로 이어질 수 있기 때문에 비판을 받아 왔습니다.따라서 Python, Ruby, HaskellOCaml 프리픽스 8진수 값은 다음과 같습니다.0O또는0o16진수치에 의해 사용되는 레이아웃에 따릅니다.
  • Java, C#, Scala, Python, RubyOCaml포함한 여러 언어는 숫자 앞에 다음을 붙임으로써 이진 값을 나타낼 수 있습니다.0B또는0b.

「 」를 참조해 주세요.

메모들

  1. ^ 모든 SQL 방언에 부호 없는 데이터 [3][4]유형이 있는 것은 아닙니다.
  2. ^ a b c d e f g h i j k l m n C/C++ 의 char, short, int, long long사이즈는, 언어의 실장에 의해서 다릅니다.
  3. ^ Java는 char 타입에 대한 산술을 직접 지원하지 않습니다.결과는 int에서 char로 되돌려야 합니다.
  4. ^ a b Dellphi의 Integer와 Cardinal의 사이즈는 플랫폼마다 다르며, 보통 LongIntLongWord로 정의됩니다.
  5. ^ a b 향후 사용을 위해 예약되어 있습니다.아직 구현되지 않았습니다.
  6. ^ ISO C 표준을 사용하면 구현은 부호 비트 1과 다른 모든 비트 0(부호 크기 및 2의 보완 표현) 또는 모든 비트 1(보완 표현)을 사용하여 값을 예약할 수 있으며,[9] 오버플로를 나타내는 데 사용되는 "트랩" 값으로 사용할 수 있습니다.
  7. ^ a b c d long과 int라는 용어는 동일합니다[11].

레퍼런스

  1. ^ Cheever, Eric. "Representation of numbers". Swarthmore College. Retrieved 2011-09-11.
  2. ^ Madhusudhan Konda (2011-09-02). "A look at Java 7's new features - O'Reilly Radar". Radar.oreilly.com. Retrieved 2013-10-15.
  3. ^ "Sybase Adaptive Server Enterprise 15.5: Exact Numeric Datatypes".
  4. ^ "MySQL 5.6 Numeric Datatypes".
  5. ^ "BigInteger (Java Platform SE 6)". Oracle. Retrieved 2011-09-11.
  6. ^ a b c d e Fog, Agner (2010-02-16). "Calling conventions for different C++ compilers and operating systems: Chapter 3, Data Representation" (PDF). Retrieved 2010-08-30.
  7. ^ Giguere, Eric (1987-12-18). "The ANSI Standard: A Summary for the C Programmer". Retrieved 2010-09-04.
  8. ^ a b Meyers, Randy (2000-12-01). "The New C: Integers in C99, Part 1". drdobbs.com. Retrieved 2010-09-04.
  9. ^ a b c d "ISO/IEC 9899:201x" (PDF). open-std.org. section 6.2.6.2, paragraph 2. Retrieved 2016-06-20.
  10. ^ a b c "ISO/IEC 9899:201x" (PDF). open-std.org. section 5.2.4.2.1. Retrieved 2016-06-20.
  11. ^ "ISO/IEC 9899:201x" (PDF). open-std.org. Retrieved 2013-03-27.
  12. ^ "Fundamental types in C++". cppreference.com. Retrieved 5 December 2010.
  13. ^ "Chapter 8.6.2 on page 12" (PDF). ecma-international.org.
  14. ^ VB 6.0 도움말 파일
  15. ^ "The Integer, Long, and Byte Data Types (VBA)". microsoft.com. Retrieved 2006-12-19.
  16. ^ Giguere, Eric (December 18, 1987). "The ANSI Standard: A Summary for the C Programmer". Retrieved 2010-09-04.
  17. ^ "American National Standard Programming Language C specifies the syntax and semantics of programs written in the C programming language". Archived from the original on 2010-08-22. Retrieved 2010-09-04.
  18. ^ ECMAScript 제6판 초안: https://people.mozilla.org/ ~jorendorff/es6-164.http #sec-literals-http-literals 2013-12-16년 Wayback Machine