コンテンツにスキップ

2-2. 원시 자료형

このコンテンツはまだ日本語訳がありません。

LIQUID 哲学評価総合スコア: 9.1 / 10
L: 連結知識 (8.8)I: 直感的構造 (9.3)Q: 質적学習 (9)U: 明瞭な説明 (9.2)I: 本質探求 (9.4)D: 深層探求 (8.8)

AI 批評総評

This document excels at uncovering the intrinsic 'why' behind primitive data structures, masterfully explaining lower-level hardware mechanics such as two's complement and CPU byte-addressability for booleans. The pedagogical flow is exceptionally smooth and intuitive, providing precise mathematical and structural explanations. To reach perfection, it could further detail the internal bit layout (sign, exponent, mantissa) of IEEE 754 floating-point numbers.

원시 자료형이란 다른 객체를 참조하지 않고, 메모리 공간에 실제 데이터 값을 직접 저장하고 해석하는 가장 기초적인 자료형을 의미한다.


  • 메모리 할당 크기: 데이터를 저장하기 위해 메모리를 몇 바이트(Byte) 할당할 것인지 정해야 한다.
  • 비트 해석 방식: 할당된 00과 11 비트열을 정수, 실수, 문자 중 무엇으로 해석할지 정해야 한다.

소수점이 없는 정수를 표현하는 자료형.

  • byte / char: 1바이트 (8비트)
    • 문자를 표시하는 char는 인코딩 규칙(ASCII)에 따라 대응되는 정수로 저장되므로 컴퓨터 내부에서는 정수형으로 취급된다.
  • short: 2바이트 (16비트)
  • int: 4바이트 (32비트)
  • long / long long: 8바이트 (64비트)

부호 여부에 따른 분류: Unsigned, Signed

섹션 제목: “부호 여부에 따른 분류: Unsigned, Signed”
  • Unsigned: 부호 없는 정수
    • 모든 비트를 절댓값 계산에 사용하여 0 이상의 정수만 표현한다.
    • 부호 비트가 없으므로 동일한 바이트 기준 Signed에 비해 양수 표현 범위가 2배 넓다.
  • Signed: 부호 있는 정수
    • 최상위 비트(MSB, Most Significant Bit)를 사용해 부호를 표현한다. (00: 양수, 11: 음수)
    • 음수는 하드웨어 연산 효율을 위해 2의 보수 형태로 저장한다.

어떤 NN비트 2진수가 주어졌을 때, 더해서 2N2^N(자리올림이 발생하는 수)이 되도록 보충하는 수.

원래 값의 모든 비트를 반전(1의 보수) 시킨 후, 11을 더한다.

  • 예) 8비트 체계에서 −7-7 표현하기
    1. 7의 이진수: 0000 0111
    2. 모든 비트 반전 (1의 보수): 1111 1000
    3. 11 더하기 (2의 보수): 1111 1001 (-7)
10진수2진수(8비트)비고
127127011111110111 1111양수 표현 한계
⋮\vdots⋮\vdots
22000000100000 0010
11000000010000 0001
00000000000000 0000부호 비트가 0
−1-1111111111111 1111
−2-2111111101111 1110
⋮\vdots⋮\vdots
−128-128100000001000 0000음수 표현 한계

컴퓨터는 뺄셈을 수행할 때, 2의 보수로 변환된 음수와의 덧셈으로 처리한다.

  1. 7+(−7)=07 + (-7) = 0
  2. 0000 0111 (+7) + 1111 1001 (−7) = 1 0000 00000000\ 0111\ (+7)\ +\ 1111\ 1001\ (-7)\ =\ 1\ 0000\ 0000

8비트 공간을 벗어난 가장 앞의 11은 하드웨어적으로 버려지므로, 최종 결과는 0000 0000(0)이 된다.

  • 00의 표현이 유일: +0 (0000 0000)과 -0 (1000 0000)이 분리되지 않아 비트 낭비가 없고 비교 연산이 명확하다.
  • 하드웨어 회로 단순화: 덧셈을 수행하는 가산기(Adder)만으로 뺄셈까지 처리할 수 있어 CPU 설계가 단순해지고 속도가 향상된다.
  • 오버플로우(Overflow): 자료형이 표현할 수 있는 최댓값을 넘어섰을 때 최솟값으로 되돌아가는 현상.
    • 8비트 Signed 정수 최대값: 127 (0111 1111)
    • 127에 1을 더하면 -128 (1000 0000)이 된다.
  • 언더플로우(Underflow): 자료형이 표현할 수 있는 최솟값보다 작아졌을 때 최댓값으로 되돌아가는 현상.
    • 8비트 Signed 정수 최솟값: -128 (1000 0000)
    • -128에서 1을 빼면 127 (0111 1111)이 된다.

소수점을 포함하는 실수를 표현하기 위한 자료형. 정수보다 훨씬 넓은 범위의 수를 표현할 수 있지만, 컴퓨터 구조상 미세한 오차가 발생한다.

  • float: 4바이트 (32비트), 유효 자릿수 약 6~7자리
  • double: 8바이트 (64비트), 유효 자릿수 약 15~16자리 (대부분 언어의 기본 실수 표준)
  1. 정수부는 2로 나누며 2진수로 변환
  2. 소수부는 2를 곱하며 그 결과의 정수부를 취하고, 소수점 이하가 00이 되거나 순환할 때까지 반복
  • 예1) 65.625 (유한소수로 떨어지는 경우)
    • 정수부: 100 0001
    • 소수부: 0.625
      • 0.625 X 2 = 1.250 (정수 11 취하고 남은 소수부만 다음 계산에 이용)
      • 0.250 X 2 = 0.500
      • 0.500 X 2 = 1.000
    • 결과: 100 0001.101
  • 예2) 2.6 (무한 순환소수가 되는 경우)
    • 정수부: 10
    • 소수부: 0.6
      • 0.6 X 2 = 1.2
      • 0.2 X 2 = 0.4
      • 0.4 X 2 = 0.8
      • 0.8 X 2 = 1.6
      • 0.6 X 2 = 1.2 (반복 시작)
    • 결과: 10.1001 1001...
  • 고정소수점 (Fixed-point)
    • 소수점의 위치를 고정하고 정수부와 소수부에 정해진 비트를 고정 할당하는 방식.
    • 표현할 수 있는 숫자의 범위가 극단적으로 좁다.
  • 부동소수점 (Floating-point)
    • 소수점 위치를 고정하지 않고 유효 숫자와 자릿수를 나누어 표현하는 방식.
    • 제한된 비트 크기 안에서 매우 넓은 범위 숫자를 표현할 수 있다.
  • 넓은 표현 범위
    • 32비트 정수의 표현 범위: 약 4.3×1094.3 \times 10^9개 (2322^{32})
    • 32비트로 실수의 표현 범위: ±1.18×10−38∼3.4×1038\pm 1.18 \times 10^{-38} \sim 3.4 \times 10^{38}
  • 효율적인 메모리 활용
    • 고정소수점 방식보다 메모리를 절약하면서 더 넓은 범위의 수를 표현할 수 있다.
  • 하드웨어 표준화 (IEEE 754)
    • 전 세계 모든 컴퓨터 및 프로그래밍 언어에 동일한 규격이 내장되어 있어 일관된 연산 결과를 낸다.
  • 10진수 소수의 근사값 오차
    • 2진수는 분모가 2의 거듭제곱인 수만 유한소수로 표현할 수 있다.
    • 0.10.1, 0.20.2 등은 2진수로 변환할 시 무한 순환소수가 되어, 비트 한계로 끝자리가 잘려 나가며 오차가 발생한다.
  • 자리수 손실
    • 매우 큰 수에 매우 작은 수를 더하면 자릿수를 맞추는 과정에서 작은 수가 완전히 소실될 수 있다.
  • 동등 비교 불가
    • 수학적으로 동일한 값이라도 컴퓨터 내부의 근사값 오차로 인해 동등 비교 시 false가 반환될 수 있다.
    • 두 실수의 비교는 등호(==) 대신 두 값의 차이가 매우 작은 허용 오차보다 작은지로 판단한다.

단일 문자 하나를 저장하기 위한 자료형.

컴퓨터는 문자를 직접 다룰 수 없으므로 사전에 정의된 정수 코드 번호로 변환하여 저장한다.

  • ASCII (아스키코드)
    • 영문 대소문자, 숫자, 특수기호, 제어 문자 등을 7비트(총 128개)로 정의한 가장 기초적인 인코딩 표준.
  • Unicode (유니코드)
    • 영어 외에 한글, 한자, 아랍어, 특수 기호, 이모지 등 전 세계의 모든 언어를 하나의 체계로 표현하기 위한 표준.
    • UTF-8: 1바이트 ~ 4바이트까지 글자에 따라 크기를 유연하게 조절하는 가변 길이 인코딩 방식. ASCII와 완벽하게 호환되어 가장 널리 사용된다.

참(true)과 거짓(false)을 표현하는 자료형.

  • 조건문이나 반복문의 분기 조건을 평가하고 프로그램의 실행 흐름을 제어하는 기준이 된다.
  • 1바이트(8비트)로 할당되는 이유
    • 참과 거짓은 00, 11로 구분할 수 있으므로 이론상 1비트만 있어도 충분하다.
    • 하지만 CPU가 데이터를 처리하는 최소 단위가 바이트이다.
    • 따라서 1비트만 처리하도록 하는 추가 과정을 생략해 처리 속도를 높이고자 1바이트를 통째로 할당한다.