무엇이 무엇인가? · bei.pm

이 텍스트는 OpenAI GPT-4o Mini에 의해 자동으로 번역되었습니다.

이 섹션에는 파일 형식과 리버스 엔지니어링에 대한 기사들이 있습니다.

하지만 사실은 이렇습니다:
세상에는 많은 프로그래밍 언어가 있고, 많은 사람들이 어떤 것들을 전혀 다른 이름으로 알고 있거나, 그들의 프로그래밍 언어가 그것을 추상화해버렸기 때문에 가장 기본적인 것들의 존재조차 모르는 경우가 많습니다.

tl;dr:
내 표기는 대략 C99 <stdint.h>에 기반하고 있습니다. 이 표기를 이해할 수 있는 사람은 내 표기를 쉽게 이해할 수 있을 것입니다.

정수

정수는 간단히 말해 소수점이 없는 정수입니다.

정수는 데이터 형식에서 일반적으로 고정된 숫자 범위, 즉 해상도 내에서 정의됩니다. 이는 비트로 표시되며, "바이트" 및 이와 기반한 유형(워드, 쿼드워드 등)은 일반적으로 플랫폼에 따라 다르기 때문입니다.

또한 정수 유형 간에는 자연수 (ℕ, 즉 부호 없음 - 부호 없는 정수)와 정수 (ℤ, 즉 부호 있음 - 부호 있는 정수)의 차이가 있습니다.
이 정보는 식별자에서 부호(u 또는 s)로 알 수 있습니다.

부호가 있는 정수는 1의 보수로 표현되거나 2의 보수로 표현될 수 있습니다.
다른 방법이 명시되지 않는 한 2의 보수가 사용되며, 이는 현대 컴퓨터 과학에서 선호되는 표현입니다.

부호 없는 숫자는 제 문서에서 uint로 표기하며, 그 다음에 비트로 정확도를 명시합니다.
부호 있는 숫자는 제 문서에서 sint로 표기하며, 마찬가지로 다음에 비트로 정확도를 명시합니다.

문자에 대한 데이터 유형 "char"의 사용을 지양하며, 문자열은 일반적으로 특별한 해석을 가진 정수 값의 배열로 간주됩니다.
따라서 이러한 값은 uint(8)[]로 표현됩니다.

예시:

표기법 C99 stdint.h-동등 설명 수치 범위
uint(16) uint16_t 부호 없는 정수, 16 비트 길이 0 - 65,535
sint(8) int8_t 부호 있는 정수, 8 비트 길이, 2의 보수 -126 - 127
uint(24) uint32_t:24 부호 없는 정수, 24 비트 길이 0 - 16,777,216

고정 소수점 값

고정 소수점 값유리수 (Q)의 범위에 속하는 숫자 값으로, 따라서 소수점소수 자리를 가지고 있습니다.

고정 소수점 값의 경우 - 이름에서 알 수 있듯이 - 소수점의 위치는 데이터 유형에 의해 고정되어 있습니다.
이로 인해 이 데이터 유형의 숫자는 고정된 숫자 범위를 가지며, 수학적으로 표현하면 숫자 공간은 유한합니다.

실제로 이 데이터 유형은 주로 충분히 빠른 부동 소수점 하드웨어 장치가 없는 플랫폼에서 사용됩니다. 고정 소수점 값의 계산은 정수 장치에서 수행할 수 있기 때문입니다.

또한 이 데이터 유형은 예를 들어 고정된 요구 사항이 충족되어야 하는 데이터베이스 관리 시스템에서 사용됩니다.
여기서 재무 데이터의 영구 저장을 위한 시스템을 생각해 볼 수 있습니다; 대부분의 통화는 소수점 아래 2자리로 제한됩니다. (하지만 고정 소수점 값을 사용하는 것은 현명하지 않으며, 대신 가장 작은 통화 단위를 정수로 저장하고 나머지 표현 수준은 맡기는 것이 더 똑똑합니다)

정수의 경우와 유사하게, 고정 소수점 값에 대해 소수점 의 해상도를 지정합니다:
ufixed(9,7)는 소수점 앞에 9 비트, 소수점 뒤에 7 비트를 예약하는 부호 없는 데이터 유형을 나타내며, 총 16 비트 폭을 가지며, 예를 들어 서로 독립적인 두 정수 벡터로 (0,0)에서 (511,127)까지의 범위를 다룰 수 있습니다.
그러나 이 해석은 10진수 표현에서 28개의 숫자를 낭비하게 되며, 실제로는 아마도 (511,99)로 제한될 것입니다.

고정 소수점 값을 두 개의 개별 정수로 된 벡터로 직접 해석하는 대신 - 이는 10진수로 변환할 때 항상 사용되지 않는 데이터 영역과 수동 이체를 의미합니다 - 소수점 뒤의 영역을 전체 해상도의 분수로 해석할 수도 있습니다.
앞서 언급한 ufixed(9,7)의 경우, 분모가 27인 분수가 됩니다 - 숫자 범위는 0.00에서 511 + 126127까지 확장됩니다. 10진수 표현으로 변환할 때는 소수점을 128로 나누면 됩니다.
이 변형은 수동 이체가 자동으로 발생하므로 계산을 더 쉽게 수행할 수 있으며, 따라서 이 변형이 일반적으로 선호됩니다.
그러나 이 변형은 10진수 표현에서 소수 자리가 더 이상 보장된 해상도를 갖지 않으며, 개별 소수점이 0.01의 가치가 아닌 0.007874를 가지게 되어 라운딩 오류를 초래할 수 있습니다.

어떤 해석 방법이 사용되는지는 해당 사용 장소에 문서화됩니다.

부동소수점 값

부동 소수점 수는 고정 해상도를 가진 정수가 수학적 항을 통해 표현되며, 효과적으로 소수점 아래 부분이 이동을 통해 형성되는 수학적으로 복잡한 표현입니다 - 따라서 과학적 표기법에 직접적으로 관련됩니다.
이를 구현하는 가장 일반적인 방법은 IEEE 754로 표준화되어 있으며, 이후 국제적으로 인정받고 있습니다.

부동 소수점 값은 일반적으로 다음 구성 요소로 이루어져 있습니다:

부호 (0 또는 1) 지수 가수

부호는 이진 예/아니오 정보로 쉽게 파악할 수 있는 반면, 실제 숫자는 다음의 방정식을 통해 형성됩니다.
가수 * 2지수

추가로, 특별한 경우의 유리수를 다루는 상수 값들이 존재하며 - 여기에는 ±∞NaN ("유효한 숫자가 아님")이 포함됩니다.

부동 소수점 값은 정확성이 그리 중요하지 않을 때 특히 유용합니다. 이런 유형의 값은 필연적으로 반올림 오류가 발생하며 따라서 정확성이 손실됩니다. 따라서 부동 소수점 값은 일반적으로 3D 모델의 정점 벡터나 시각적 표현을 위한 베지어/스플라인 곡선과 같은 좌표 정의에 사용됩니다.

데이터 형식에서 부동 소수점 값은 float(가수, 지수)로 지정됩니다.
IEEE 754와 다른 형식이 사용될 경우, 이에 대해 명시적으로 표시됩니다.