원시 데이터 유형

Primitive data type

[1] 컴퓨터 과학에서 원시 데이터 유형은 다음 중 하나이다.[citation needed]

  • 기본형식은 프로그래밍 언어에 의해 기본 빌딩 블록으로 제공되는 데이터 유형이다. 대부분의 언어는 기본형부터 복잡한 복합형태를 재귀적으로 구성할 수 있게 한다.
  • 내장형(built-in type)은 프로그래밍 언어가 내장형(built-in) 지원을 제공하는 데이터형이다.

대부분의 프로그래밍 언어에서 모든 기본 데이터 유형은 내장되어 있다. 또한, 많은 언어는 복합 데이터 유형 세트를 제공한다.

언어와 그 구현에 따라 원시 데이터 유형은 컴퓨터 메모리에 있는 물체와 일대일 일치성을 가질 수도 있고 그렇지 않을 수도 있다. 그러나, 사람들은 보통 기본적인 원시 데이터 유형에 대한 운영이 가장 빠른 언어구조가 될 것으로 예상한다.[citation needed] 예를 들어 정수 추가는 단일 기계 명령으로 수행할 수 있으며, 일부 프로세서는 단일 명령으로 문자의 시퀀스를 처리하기 위한 특정 지침을 제공한다.[2] 특히, C 표준은 "플레인 인트 오브젝트는 실행 환경의 아키텍처에 의해 제안된 자연적인 크기를 가지고 있다"[citation needed]고 언급하고 있다. 라는 뜻이다. int 32비트 아키텍처에서는 32비트 길이가 될 가능성이 높다. 기본적인 원시 타입은 거의 항상 가치 타입이다.

대부분의 언어는 프로그램에 의해 수정되는 원시(기본 제공 또는 기본) 데이터 유형의 동작이나 기능을 허용하지 않는다. 프로그램 내에서 모든 데이터 유형을 확장할 수 있는 Smalltalk는 예외로, 이 데이터 유형에 대해 수행할 수 있는 작업을 추가하거나 기본 제공 작업을 재정의할 수도 있다.[citation needed]

개요

사용할 수 있는 원시 데이터 유형의 실제 범위는 사용 중인 특정 프로그래밍 언어에 따라 달라진다. 예를 들어 C#에서 문자열은 복합적이지만 내장된 데이터 유형인 반면, BASIC의 현대적인 방언과 자바스크립트에서는 기본과 빌트인 원시 데이터 유형으로 동화된다.[3][4]

고전적인 기본 원시 유형에는 다음이 포함될 수 있다.

  • 문자(문자)character, char);
  • 정수(integer, int, short, long, byte다양한 정밀도를 가진 );
  • 부동 소수점 (float, double, real, double precision);
  • 고정점수(fixed다양한 정밀도와 프로그래머-프로그래머-프로그래머 스케일을 가진 .
  • 부울, 논리적 값 참 및 거짓.
  • 참조(포인터 또는 핸들 또는 설명자라고도 함), 다른 객체를 가리키는 값. 참조는 메모리 주소 또는 값 집합에 대한 색인일 수 있다.
위의 원시성은 일반적으로 유동점을 제외하고 컴퓨터 하드웨어에 의해 다소 직접적으로 지원되기 때문에 그러한 원시 요소에 대한 운영은 대개 상당히 효율적이다. 일부 프로그래밍 언어는 텍스트 문자열을 원시(예: BASIC)로 지원하는 반면, 다른 프로그래밍 언어는 텍스트 문자열을 문자의 배열(예: C)으로 취급한다. 일부 컴퓨터 하드웨어(예: x86)에는 텍스트 문자열 처리에 도움이 되는 지침이 있지만 텍스트 문자열에 대한 완전한 하드웨어 지원은 드물다.

문자열은 사용된 인코딩의 모든 문자 시리즈일 수 있다. 코드에서 문자열을 분리하려면 대부분의 언어가 문자열을 단일 또는 큰따옴표로 묶는다. 예를 들어 "Hello World" 또는 "Hello World"가 있다. "200"은 정수 유형으로 오인될 수 있지만 큰따옴표로 포함되어 있기 때문에 실제로는 문자열 유형이라는 점에 유의하십시오.

내장할 수 있는 보다 정교한 유형:

특정 원시 데이터 유형

정수수

정수 데이터 유형은 수학적 정수의 일부 범위를 나타낸다. 정수는 부호화(부호화 값 허용) 또는 부호화되지 않은 정수일 수 있다(부호화되지 않은 정수만 해당). 공통 범위는:

크기(바이트) 크기(비트) 이름 서명된 범위(서명에 대한 두 개의 보완 요소 가정) 서명되지 않은 범위
1바이트 8비트 바이트, 옥텟, 최소 크기 char C99(한계.h CHAR_B 참조)IT) -++로 변경 0 대 255
2바이트 16비트 x86word, 최소 크기: short 그리고 int 주식회사 -32,768 ~ +32,767 0 ~ 65,535
4바이트 32비트 x86 더블 워드, 최소 크기 long C에서, 실제 크기 int 대부분의 최신 C 컴파일러,[5] IA-32 호환 프로세서용 포인터 -2,1906,483,648 ~ +2,190,483,647 0 ~ 4,294,967,295
8바이트 64비트 x86 4중 워드, 최소 크기 long long C에서, 실제 크기 long 대부분의 최신 C 컴파일러,[5] x86-64 호환 프로세서용 포인터 -9,197,372,036,036,854,775,808 ~ +9,372,036,854,775,807 0 ~ 18446,744,073,709,551,615
무제한/8 무제한의 비그넘 –2unlimited/2 ~ +(2unlimited/2 - 1) 0unlimited ~ 2 - 1

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

  • 42
  • 10000
  • -233000

많은 프로그래밍 언어로 정수 리터럴을 쓰는 방법에는 여러 가지가 있다.

  • 대부분의 프로그래밍 언어, 특히 C의 영향을 받는 언어들은 정수 리터럴에 16진수 값을 포함하거나 나타내기 위해 접두사를 붙인다. 예를 들어, 다른 언어들은 다른 표기법을 사용할 수 있다. 예를 들어, 일부 표준 언어들은 16진수 값의 끝에 추가되거나 16진수 값의 끝에 추가된다.
  • Perl, Ruby, Java, Julia, D, RustPython(버전 3.6부터 시작)은 내장 밑줄을 선명하게 허용하며, 예를 들어 , 고정형 Fortran은 정수 리터럴의 내장 공간을 무시한다.
  • CC++에서 선행 0은 를 들어, 8진수 값을 나타낸다. 이는 주로 유닉스 모드와 함께 사용되도록 의도되었다. 그러나 정상적인 정수 또한 0으로 이어질 수 있기 때문에 비판 받아왔다.[6] 이와 같이 Python, Ruby, HaskellOCaml 접두사 8진수 값( 또는 )은 16진수 값에 사용되는 레이아웃을 따른다.
  • Java, C#, Scala, Python, RubyOCaml을 포함한 여러 언어는 또는 와 접두사를 붙여 이진수 값을 나타낼 수 있다.

부동 소수점 수

부동 소수점은 부분적인 부분을 가질 수 있는 제한된 정밀도의 합리적 숫자를 나타낸다. 이 숫자들은 일반적으로 이진법이나 때로는 십진법으로 과학 표기법과 동등한 형식으로 내부에 저장된다. 부동 소수점 숫자는 제한된 정밀도를 가지기 때문에, 실제 또는 합리적인 수의 부분 집합만 정확하게 나타낼 수 있고, 다른 숫자들은 대략적으로만 나타낼 수 있다.

많은 언어들은 하나의 정밀도(흔히 "float"라고 불림)와 이중 정밀도 타입을 모두 가지고 있다.

부동 소수점 번호의 리터럴에는 소수점이 포함되며, 일반적으로 또는 과학적 표기법을 나타내기 위해 사용된다. 부동 소수점 리터럴의 예는 다음과 같다.

  • 20.0005
  • 99.9
  • -5000.12
  • 6.02e23

일부 언어(예: Fortran, Python, D)도 실제 부분과 가상 부분이라는 두 개의 부동 소수점 숫자로 구성된 복잡한 숫자 유형을 가지고 있다.

고정점수

고정점수는 부분적인 부분을 가질 수 있는 제한된 정밀도의 합리적 숫자를 나타낸다. 이 숫자들은 내부적으로 스케일링 정수의 형태로 저장되며, 일반적으로 2진수로 저장되지만 때로는 10진수로 저장되기도 한다. 고정점수는 한정된 정밀도를 가지기 때문에, 실제 또는 합리적인 숫자의 부분집합만 정확하게 나타낼 수 있고, 다른 숫자들은 대략적으로만 나타낼 수 있다. 고정점수 또한 부동소수점보다 값범위가 더 제한되는 경향이 있으므로 프로그래머는 최종 결과뿐만 아니라 중간 계산에서도 오버플로가 발생하지 않도록 주의해야 한다.

불리안스

일반적으로 "bool" 또는 "boolean"으로 표기되는 부울 형식은 일반적으로 "true" 또는 "false" 값을 가질 수 있는 논리적 형식이다. 비록 "true"와 "false"라는 값 세트를 수용하기 위해서는 단 하나의 비트만 필요하지만, 프로그래밍 언어는 일반적으로 부울 유형을 하나 이상의 바이트로 구현한다.

많은 언어(예: 자바, 파스칼, 아다)는 부울의 개념을 따르는 부울란을 구별되는 논리적 유형으로 구현한다. 그러나 언어는 때때로 술어 및 부울 표현에 확장된 의미를 부여하거나 이전 버전의 언어와의 역호환성을 달성하기 위해 술어를 숫자 형식으로 암묵적으로 변환할 수 있다. 예를 들어 ANSI C와 이전 표준을 따랐던 초기 버전의 C 프로그래밍 언어에는 전용 부울 유형이 없었다. 대신 0의 숫자 값은 "거짓말"로 해석되고, 다른 값은 "참"으로 해석된다.[7] 새로운 C99stdbool.h[8]C++ 지지대에 포함될 수 있는 뚜렷한 부울 유형을 추가했다. bool 기본 제공 유형으로, 예약 단어로서 "참"과 "거짓"을 사용한다.[9]

문자 및 문자열

문자 유형(일반적으로 "char"라고 함)은 단일 문자, 숫자, 문장 부호, 기호, 형식 코드, 제어 코드 또는 기타 특수 코드(예: 바이트 순서 표시)를 포함할 수 있다. C에서는 char 가장 작은 주소 지정 가능한 메모리 단위로 정의된다. 대부분의 시스템에서 이것은 8비트다; POSIX와 같은 몇몇 표준에서는 이 크기를 요구한다. 일부 언어에는 두 개 이상의 문자 유형이 있는데, 예를 들어 ASCII 문자의 단일 바이트 유형과 유니코드 문자의 다중 바이트 유형이다. "문자 유형"이라는 용어는 일반적으로 값이 코드 단위를 보다 정확하게 나타내는 유형에도 사용되는데, 예를 들어 자바(16비트 문자로만 지원)와 자바스크립트에서 UTF-16 코드 단위를 사용한다.

문자는 문자열로 결합할 수 있다. 문자열 데이터는 숫자 및 기타 숫자 기호를 포함할 수 있지만 텍스트로 처리된다. 예를 들어, 숫자 값(예: 200)으로 수행할 수 있는 수학 연산은 일반적으로 문자열로 작성된 동일한 값(예: "200")에서는 수행할 수 없다.

문자열은 프로그래밍 언어에 따라 다양하게 구현된다. 문자열을 구현하는 가장 간단한 방법은 문자열을 배열로 만든 다음 문자열의 끝을 나타내는 데 사용되는 구분 문자(일반적으로 NUL)를 따르는 것이다. 이를 null-terminated 문자열이라고 하며, 일반적으로 하드웨어 추상화 양이 적은 언어(: C, Assembly)에서 발견된다. 구현이 쉽지만, null 종료 문자열은 버퍼 오버플로를 유발한다는 비판을 받아왔다. Python, Ruby, BASIC의 많은 방언과 같은 대부분의 고급 스크립트 언어는 별도의 문자 유형이 없으며, 길이가 1인 문자열은 일반적으로 단일 문자를 나타내기 위해 사용된다. C++, Java와 같은 일부 언어에는 null-terminated 문자열(일반적으로 역호환성 측정에 대해)을 사용할 수 있는 기능이 있지만 문자열 처리를 위해 자체 클래스를 추가로 제공한다(std::string 그리고 java.lang.String(각각 표준 라이브러리에)

또한 어떤 언어에서 문자열의 변이가능성인지 불변성인지에 대해서도 차이가 있다. 변이 가능한 문자열은 생성 후 변경될 수 있지만 불변한 문자열은 크기와 내용을 일정하게 유지한다. 후자에서 현을 바꾸는 유일한 방법은 새로운 현을 만드는 것이다. 각 접근법에는 장점과 단점이 모두 있다: 불변의 문자열은 훨씬 덜 유연하지만, 그것들은 더 단순하고 완전히 나사산 안전하다. 변이 가능한 문자열을 사용하는 언어의 예로는 C++, Perl, Ruby 등이 있는데 반해 자바스크립트, 루아, 파이톤, 바둑이 포함되지 않은 언어들은 이에 해당된다. Object-C와 같은 몇몇 언어는 변이 가능하거나 불변한 문자열에 대해 다른 유형을 제공한다.

문자와 문자열의 리터럴은 보통 따옴표로 둘러 싸여 있는데, 때로는 문자의 경우 작은따옴표()'를, 문자열의 경우 큰따옴표()"를 사용한다. Python은 문자열 표기법에 대해 두 변종 중 하나를 받아들인다.

C 구문의 문자 리터럴의 예는 다음과 같다.

  • 'A'
  • '4'
  • '
  • '\t' (변수 문자)
  • C 구문에서의 문자열 리터럴의 예는 다음과 같다.

    • "A"
    • "Hello World"
    • "There are 4 cats."

    숫자 데이터 유형 범위

    각 숫자 데이터 유형에는 범위라고 알려진 최대값과 최소값이 있다. 범위를 벗어나 숫자를 저장하려고 하면 컴파일러/런타임 오류가 발생하거나 사용 중인 언어에 따라 계산이 잘못될 수 있다(잘라서).

    변수의 범위는 값을 저장하는 데 사용되는 바이트 수를 기준으로 하며, 정수 데이터 유형은 일반적으로 2개의n 값(여기서 n은 값에 기여하는 비트 수)을 저장할 수 있다. 다른 데이터 유형(예: 부동 소수점 값)의 경우 범위는 더 복잡하며 이를 저장하는 방법에 따라 달라질 수 있다. 또한 전체 바이트를 사용하지 않는 유형도 있다. 예를 들어, 단일 비트를 필요로 하는 부울이 있고, 이진값을 나타내는 유형도 있다(실제로는 바이트가 자주 사용되지만, 나머지 7비트는 중복된다). 일부 프로그래밍 언어(: Ada, Pascal)도 반대 방향, 즉 프로그래머는 주어진 문제를 해결하는 데 필요한 범위와 정밀도를 정의하고 컴파일러는 자동으로 가장 적절한 정수나 부동 소수점 유형을 선택한다.

    참고 항목

    참조

    1. ^ Makar, A. B.; McMartin, K. E.; Palese, M.; Tephly, T. R. (June 1975). "Formate assay in body fluids: application in methanol poisoning". Biochemical Medicine. 13 (2): 117–126. doi:10.1016/0006-2944(75)90147-7. ISSN 0006-2944. PMID 1.
    2. ^ "Single Instruction Single Data - an overview ScienceDirect Topics".
    3. ^ "Primitive Data Types (The Java™ Tutorials > Learning the Java Language > Language Basics)". docs.oracle.com. Retrieved 2020-05-01.
    4. ^ "Data Types in C". GeeksforGeeks. 2015-06-30. Retrieved 2020-05-01.
    5. ^ Jump up to: a b Fog, Agner (2010-02-16). "Calling conventions for different C++ compilers and operating systems: Chapter 3, Data Representation" (PDF). Retrieved 2010-08-30.
    6. ^ ECMAScript 제6판 초안: https://people.mozilla.org/~jorndorff/es6-16.sec-literals-literals 2013-12-16 Wayback Machine보관
    7. ^ Kernighan, Brian W; Ritchie, Dennis M (1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. p. 41. ISBN 0-13-110163-3.
    8. ^ "Boolean type support library". devdocs.io. Retrieved October 15, 2020.
    9. ^ "Bool data type in C++". GeeksforGeeks. 5 June 2017. Retrieved October 15, 2020.
    10. ^ Mansoor, Umer (8 May 2016). "The char Type in Java is Broken". CodeAhoy. Retrieved 10 February 2020.

    외부 링크

    • 위키미디어 공용의 원시 유형과 관련된 미디어