컴퓨터 번호 형식

Computer number format

컴퓨터 번호 형식은 프로그램 가능한 컴퓨터계산기와 같은 디지털 장치 하드웨어 및 소프트웨어에 있는 숫자 값의 내부 표현이다.[1] 숫자 값은 바이트나 워드와 같은 비트 그룹으로 저장된다. 숫자 값과 비트 패턴 사이의 인코딩은 컴퓨터 작동의 편리함을 위해 선택된다.[citation needed] 컴퓨터의 명령 집합에 의해 사용되는 인코딩은 일반적으로 인쇄나 디스플레이와 같은 외부 사용을 위해 변환이 필요하다. 다른 유형의 프로세서는 숫자 값의 내부 표현이 다를 수 있으며 정수 및 실제 숫자에 서로 다른 규약이 사용된다. 대부분의 계산은 프로세서 레지스터에 맞는 숫자 형식으로 수행되지만, 일부 소프트웨어 시스템은 복수의 메모리 단어를 사용하여 임의로 큰 숫자의 표현을 허용한다.

이진수 표현

컴퓨터는 데이터를 이진수 세트로 나타낸다. 표현은 비트로 구성되며, 비트는 바이트와 같은 더 큰 집합으로 그룹화된다.

표 1: 2진수에서 8진수까지
이진 문자열 8진수 값
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
표 2: 비트 문자열의 값 수입니다.
비트 문자열 길이(b) 가능한 값 수(N)
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
...

비트는 두 상태 중 하나를 나타내는 이진수다. 비트의 개념은 1 또는 0, on 또는 off, yes 또는 no, true 또는 false 또는 스위치에 의해 인코딩되거나 어떤 종류의 토글의 값으로 이해할 수 있다.

하나의 비트가 그 자체로 두 개의 값만 나타낼 수 있는 반면, 비트 문자열은 더 큰 값을 나타내기 위해 사용될 수 있다. 예를 들어, 3비트의 문자열은 표 1에 나타낸 것과 같이 최대 8개의 구별되는 값을 나타낼 수 있다.

문자열을 구성하는 비트의 수가 증가함에 따라 가능0과 1 조합의 수는 기하급수적으로 증가한다. 하나의 비트는 두 개의 값 조합만 허용하고, 두 개의 비트를 조합하면 네 개의 개별 값, 8개의 비트 3개를 만들 수 있으며, 공식 2^n과 함께 증가한다. 가능한 조합의 양은 표 2에서 표시한 대로 추가된 각 이진 숫자로 두 배가 된다.

특정한 수의 비트를 가진 그룹들은 다양한 것들을 나타내기 위해 사용되고 특정한 이름을 가지고 있다.

바이트는 문자를 나타내는 데 필요한 비트 수를 포함하는 비트 문자열이다. 대부분의 현대 컴퓨터에서는, 이것은 8비트 문자열이다. 바이트의 정의는 문자를 구성하는 비트 수와 관련이 있기 때문에, 일부 구형 컴퓨터들은 바이트에 다른 비트 길이를 사용하였다.[2] 많은 컴퓨터 구조에서 바이트는 가장 작은 어드레싱 가능한 단위, 즉 어드레싱의 원자라고 말한다. 예를 들어, 64비트 프로세서가 한 번에 64비트를 처리할 수 있지만, 그들은 여전히 그 메모리를 8비트 조각으로 나눌 수 있다. 이것을 바이트 어드레스 가능 메모리라고 한다. 역사적으로 많은 CPU가 8비트의 일부 배수로 데이터를 읽는다.[3] 8비트의 바이트 크기가 매우 일반적이지만 정의가 표준화되지 않았기 때문에 8비트 시퀀스를 명시적으로 설명하기 위해 옥텟이라는 용어가 사용되기도 한다.

니블(nyble)은 4비트로 구성된 숫자다.[4]바이트인 이 닙블은 단어의 희곡으로 명명되었다. 사람은 어떤 것에서 한 입 먹기 위해 몇 개의 니블이 필요할 수 있다. 마찬가지로, 나이블은 바이트의 일부분이다. 4비트는 16개의 값을 허용하기 때문에 니블은 때때로 16진수 자릿수로 알려져 있다.[5]

8진수 및 16진수 숫자 표시

8진수 및 16진수 인코딩은 컴퓨터에서 사용하는 이진수를 나타내는 편리한 방법이다. 컴퓨터 공학자들은 종종 이진수량을 써야 하지만, 실제로 1001001101010001과 같은 이진수를 쓰는 것은 지루하고 오류가 발생하기 쉽다. 따라서 2진수량은 base-8 또는 "octal" 또는 훨씬 더 일반적으로 base-16, "헥사데시멀"(hex) 숫자 형식으로 기록된다. 십진법에서는 0에서 9까지의 10자리 숫자가 있는데, 이 숫자가 합쳐져서 숫자가 된다. 팔진계에서는 0에서 7까지의 8자리 숫자밖에 없다. 즉, 8진수 "10"의 값은 소수 "8"과 같고, 8진수 "20"은 소수 "16"과 같은 값이다. 16진법 체계에서는 16자리 숫자가 있는데, 0~9자리 뒤에 관례적으로 A~F자리까지 있다. 즉, 16진수 "10"은 소수 "16"과 같고, 16진수 "20"은 소수 "32"와 같다. 다른 기준에서 숫자의 예와 비교는 아래 차트에 설명되어 있다.

숫자를 입력할 때 숫자 시스템을 설명하기 위해 포맷 문자를 사용한다. 예를 들어 이진수의 경우 000_0000B 또는 0b000_00000, 16진수의 경우 0F8H 또는 0xf8.

베이스 간 변환

표 3: 다른 기준에서의 값 비교
십진법 이진수 팔분의 일 16진법
0 000000 00 00
1 000001 01 01
2 000010 02 02
3 000011 03 03
4 000100 04 04
5 000101 05 05
6 000110 06 06
7 000111 07 07
8 001000 10 08
9 001001 11 09
10 001010 12 0A
11 001011 13 0B
12 001100 14 0C
13 001101 15 0D
14 001110 16 0E
15 001111 17 0F

이 숫자 체계들은 각각 위치 체계지만, 십진수 가중치는 10의 힘인 반면, 팔진수 가중치는 8의 힘, 십진수 가중치는 16의 힘이다. 16진수 또는 8진수에서 10진수로 변환하려면 각 자릿수에 대해 자릿수 값을 위치 값으로 곱한 다음 결과를 추가한다. 예를 들면 다음과 같다.

분수를 2진수로 표시

고정점수

고정점 형식은 분수를 이진수로 나타내는데 유용할 수 있다.

숫자의 분수 및 정수 부분을 저장하려면 원하는 정밀도와 범위에 필요한 비트 수를 선택해야 한다. 예를 들어 32비트 형식을 사용하면 정수에 16비트를, 분수에 16비트를 사용할 수 있다.

8의 비트 다음에 4의 비트, 2의 비트, 1의 비트. 분수 비트는 정수 비트에 의해 설정된 패턴을 계속한다. 다음 비트는 반쪽, 그 다음 분기는 반쪽, 그 다음은 ⅛쪽 비트, 등등. 예를 들면 다음과 같다.

정수 비트 분수 비트
0.500 = 1/2 = 00000000 00000000.10000000 00000000
1.250 = 1+1/4 = 00000000 00000001.01000000 00000000
7.375 = 7+3/8 = 00000000 00000111.01100000 00000000

이러한 형태의 인코딩은 이진수로 일부 값을 나타낼 수 없다. 예를 들어, 소수점 1/5, 0.2의 분율에서 가장 가까운 근사치는 다음과 같다.

13107 / 65536 = 00000000 00000000.00110011 00110011 = 0.1999969... 십진법으로
13108 / 65536 = 00000000 00000000.00110011 00110100 = 0.2000122... 십진법으로

더 많은 숫자를 사용해도 정확한 표현은 불가능하다. 0.33333333...로 십진법으로 표기된 숫자 1/3은 무한정 계속된다. 너무 일찍 종료된 경우 값이 1/3을 정확하게 나타내지 않을 것이다.

부동 소수점 수

서명되지 않은 정수와 서명된 정수는 모두 디지털 시스템에서 사용되지만 32비트 정수만으로는 계산기가 처리할 수 있는 숫자의 모든 범위를 처리할 수 없으며 분율도 포함되지 않는다. 실제 숫자의 더 큰 범위와 정밀도를 추정하기 위해서는 서명된 정수와 고정점 수를 버리고 "부동점" 형식으로 가야 한다.

십진법에서 우리는 형태(과학 표기법)의 부동 소수점 숫자에 익숙하다.

1.1030402 × 105 = 1.1030402 × 100000 = 110304.02

또는 보다 압축적으로:

1.1030402E5

"1.1030402 곱하기 1에 5 0"을 의미한다. 우리는 "시그니칸드"로 알려진 특정한 숫자 값(1.1030402)을 10의 검정력(E5, 105 또는 10,000을 의미함)으로 곱하고, "우수"로 알려져 있다. 만약 우리가 음수 지수를 가지고 있다면, 그것은 그 숫자에 소수점 오른쪽에 있는 많은 자리들의 1을 곱한 것을 의미한다. 예를 들면 다음과 같다.

2.34E-6 = 2.3434 × 10−6 = 2.3434 × 0.000001 = 0.0000023434

이 방법의 장점은 지수를 사용하면 의미와 "숫자 정밀도"의 자릿수가 범위보다 훨씬 작더라도 훨씬 더 넓은 범위의 숫자를 얻을 수 있다는 것이다. 유사한 이진 부동 소수점 형식을 시스템에 대해 정의할 수 있다. 그러한 계획에는 여러 가지가 있는데, 가장 인기 있는 것은 전기전자공학연구소(IEEE)에서 정의한 것이다. IEEE 754-2008 표준 규격은 다음을 포함하는 64비트 부동 소수점 형식을 정의한다.

  • 11비트 이진수 지수("multi-1023" 형식 사용) 초과-1023은 지수가 0 ~ 2047 사이의 부호 없는 이진수로 나타나는 것을 의미한다. 1023을 빼면 실제 부호화된 값이 된다.
  • 52비트 의미 및 부호 없는 이진수로서 선행 암시적 "1"로 분수 값을 정의함
  • 숫자 표지를 붙이는 부호

이러한 숫자가 8바이트의 메모리에 저장되는 방식을 보여줌으로써 이 형식이 어떻게 보이는지 알아보자.

바이트 0 S x10 x9 x8 x7 x6 x5 x4
바이트 1 x3 x 2 x 1 x0 m51 m50 m49 m48
바이트 2 m47 m46 m45 m44 m43 m42 m41 m40
바이트 3 m39 m38 m37 m36 m35 m34 m33 m32
바이트 4 m31 m30 m29 m28 m27 m26 m25 m24
바이트 5 m23 m22 m21 m20 m19 m18 m17 m16
바이트 6 m15 m14 m13 m12 m11 m10 m9 m8
바이트 7 m7 m6 m5 m4 m3 m2 m1 m0

여기서 "S"는 부호 비트를, "x"는 지수 비트를, "m"은 의미와 비트를 나타낸다. 여기서 비트를 추출하면 다음 계산을 통해 변환된다.

<신호> × (1 + <의의미>) × 2<exponent> − 1023

이 체계는 다음과 같은 범위의 숫자와 함께 약 15개의 소수 자릿수로 유효한 숫자를 제공한다.

최대치의 최소의
양성의 1.797693134862231E+308 4.940656458412465E-324
부정의 -4.940656458412465E-324 -1.797693134862231E+308

이 규격은 또한 "Not A Number"에 대해 정의된 숫자가 아니며 NaNs로 알려진 몇 가지 특수 값을 정의한다. 이것들은 프로그램에 의해 유효하지 않은 운영 등을 지정하는데 사용된다.

일부 프로그램에서는 32비트 부동 소수점 숫자도 사용한다. 가장 일반적인 체계는 23비트 의의와 부호 비트를 더하고 "excess-127" 형식의 8비트 지수를 사용하여 7개의 유효한 소수 자릿수를 부여한다.

바이트 0 S x7 x6 x5 x4 x3 x 2 x 1
바이트 1 x0 m22 m21 m20 m19 m18 m17 m16
바이트 2 m15 m14 m13 m12 m11 m10 m9 m8
바이트 3 m7 m6 m5 m4 m3 m2 m1 m0

비트는 계산과 함께 숫자 값으로 변환된다.

<신호> × (1 + <의의미>) × 2<exponent> − 127

다음 범위의 숫자로 이어짐:

최대치의 최소의
양성의 3.402823E+38 2.802597E-45
부정의 -2.802597E-45 -3.402823E+38

이러한 부동 소수점은 일반적으로 "실제" 또는 "부동수"라고 알려져 있지만, 다음과 같은 여러 가지 변동을 가지고 있다.

32비트 부동 소수점 값을 "real32" 또는 "단일"이라고 부르기도 하는데, "단일 정밀 부동 소수점 값"이라는 뜻이다.

64비트 플로트를 "real64" 또는 "double"이라고 부르기도 하는데, "double-precision 부동소수 값"이라는 뜻이다.

숫자와 비트 패턴의 관계는 컴퓨터 조작의 편의를 위해 선택된다; 컴퓨터 메모리에 저장된 8바이트는 64비트 리얼, 32비트 리얼 2개, 서명되거나 서명되지 않은 정수 4개 또는 8바이트에 맞는 다른 종류의 데이터를 나타낼 수 있다. 유일한 차이점은 컴퓨터가 그것들을 어떻게 해석하느냐 하는 것이다. 만약 컴퓨터가 네 개의 서명되지 않은 정수를 저장한 다음 메모리에서 64비트 리얼로 읽어낸다면, 정크 데이터이긴 하지만 거의 항상 완벽하게 유효한 실제 숫자가 될 것이다.

오직 한정된 범위의 실수만이 주어진 비트 수로 표현될 수 있다. 산술 연산은 너무 크거나 너무 작아서 나타낼 수 없을 정도로 큰 값을 생성하거나 과소 흐름으로 흐를 수 있다.

그 표현은 정밀도가 제한되어 있다. 예를 들어, 15개의 소수 자릿수만 64비트 리얼로 나타낼 수 있다. 아주 작은 부동 소수점 숫자를 큰 숫자에 더하면 결과는 큰 숫자에 불과하다. 그 작은 숫자는 15, 16자리 해상도로도 나타나기엔 너무 작았고, 컴퓨터는 그것을 효과적으로 무시한다. 제한된 정밀도의 효과를 분석하는 것은 잘 연구된 문제다. 반올림 오류의 규모 추정과 대규모 계산에 대한 영향을 제한하는 방법은 모든 대규모 계산 프로젝트의 일부분이다. 정밀도 한계는 지수가 아니라 의의에 영향을 미치기 때문에 범위 한계와 다르다.

의의는 십진수 분율과 꼭 완벽하게 일치하는 이진 분율이다. 많은 경우에 2의 역수의 합이 특정 소수점 이하와 일치하지 않으며, 계산 결과는 약간 어긋날 것이다. 예를 들어, 소수점 "0.1"은 무한히 반복되는 이진수와 같다: 0.000110011 ...[6]

프로그래밍 언어의 숫자

어셈블리 언어로 프로그래밍하려면 프로그래머가 숫자의 표현을 추적해야 한다. 프로세서가 필요한 수학적 연산을 지원하지 않는 경우, 프로그래머는 연산을 수행하기 위한 적절한 알고리즘과 명령 시퀀스를 고안해야 하며, 일부 마이크로프로세서에서는 정수 곱셈도 소프트웨어에서 수행되어야 한다.

RubyPython과 같은 고급 프로그래밍 언어합리적, 비그넘 또는 복잡한 유형과 같은 확장된 유형일 수 있는 추상적인 숫자를 제공한다. 수학 연산은 언어의 구현에 의해 제공되는 도서관의 루틴에 의해 수행된다. 소스 코드의 주어진 수학 기호는 연산자 과부하에 의해 숫자 유형의 표현에 적합한 다른 개체 코드를 호출할 것이다; 서명, 미서명, 이성, 부동 소수점, 고정점, 적분 또는 복잡성 등 모든 숫자에 대한 수학 연산은 정확히 같은 방식으로 기록된다.

REXX자바와 같은 일부 언어는 십진수 부동소수점 연산을 제공하며, 이는 다른 형태의 반올림 오류를 제공한다.

참고 항목

참고 및 참조

이 기사의 초기 버전은 그레그 괴벨의 벡터사이트공공 도메인 기사를 바탕으로 했다.

  1. ^ Jon Stokes (2007). Inside the machine: an illustrated introduction to microprocessors and computer architecture. No Starch Press. p. 66. ISBN 978-1-59327-104-6.
  2. ^ "byte definition". Retrieved 24 April 2012.
  3. ^ "Microprocessor and CPU (Central Processing Unit)". Network Dictionary. Archived from the original on 3 October 2017. Retrieved 1 May 2012.
  4. ^ "nybble definition". Retrieved 3 May 2012.
  5. ^ "Nybble". TechTerms.com. Retrieved 3 May 2012.
  6. ^ Goebel, Greg. "Computer Numbering Format". Retrieved 10 September 2012.