JavaRush /Java Blog /Random-KO /컴퓨터 메모리의 실수. 설명.
Marianna
레벨 9
Москва

컴퓨터 메모리의 실수. 설명.

Random-KO 그룹에 게시되었습니다
좋은 오후에요 첫 번째 퀘스트의 "실수 작업의 뉘앙스"(섹션 2. 부동 소수점 수의 구조) 강의와 해당 주제에 대한 추가 강의를 공부하면서 많은 사람들이 이 주제에 대해 많은 질문을 접했을 것입니다. 처음에는 스스로에게 필요한 답을 주려고 노력했으나 이제는 일관성 있는 논리적 순서로 여러분의 완전한 이해를 돕기 위해 제시합니다. 1. 10진수 및 2진수 시스템. 1.1 십진수 체계는 가장 일반적인 체계 중 하나이며, 학교, 대학, 생활에서 컴퓨터 이외의 수학 계산에 사용하는 체계입니다. 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (아랍어) - 총 10자리 숫자를 사용합니다 . 숫자에 대한 로마 표기법도 있지만 현재는 실제로 사용되지 않습니다. 십진법에서는 십, 백, 천, 수만, 수십만, 수백만 등의 단위로 계산이 수행됩니다. -즉, 숫자의 모든 숫자입니다. 숫자의 숫자는 숫자 레코드에서 숫자의 위치 (위치) 입니다 . 자연수의 가장 낮은 숫자(및 최하위 ) 는 단위 숫자(가장 오른쪽)입니다. 왜 그는 가장 중요하지 않습니까? 숫자의 단위 자리를 삭제하면 숫자 자체가 최소한으로 변경되기 때문입니다(예: 숫자 345 및 340). 다음으로 두 번째 자리는 십의 자리 등이 됩니다. 이게 다 무슨 뜻인가요? 십진법의 정수를 취해 숫자 로 분해해 보겠습니다 . 3297 = 3*1000 + 2*100 + 9*10 + 7 따라서 숫자 3297 에는 네 번째 숫자의 3단위 (즉, 3000), 세 번째 숫자의 2단위 (200), 9 가 포함되어 있음 을 알 수 있습니다. 두 번째 숫자의 단위 (9십)와 첫 번째 숫자의 7단위입니다 . 즉, 이 숫자는 3,297 이고 따라서 위치적 입니다 . 분수(실수)의 자릿수 는 어떻습니까 ? 분수의 자릿수 (소수 부분)를 십분의 일, 백분의 일, 천분의 일, 만분의 일 등 이라고 합니다. 숫자가 소수점에서 멀어질수록(숫자의 전체 부분에서) 중요성이 줄어듭니다 (버리면 숫자 값이 거의 변하지 않습니다). 예를 들어, 소수로 표현된 분수를 생각해 봅시다: 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 따라서 분수 25.076 에는 2십, 5단위, 0십분의 일 이 포함되어 있음을 알 수 있습니다. , 7/100 및 6000. 십진법은 10자리 숫자와 10자리의 배수를 사용하므로 이름이 "십진수"입니다. 1.2 이진수 체계는 거의 모든 현대 컴퓨터 및 기타 컴퓨팅 전자 장치에 사용되는 숫자 체계입니다. 숫자를 기록하려면 0과 1 이라는 두 개의 숫자만 사용합니다. 숫자가 어떤 숫자 체계로 쓰여 있는지 혼동하지 않도록 오른쪽 하단에 표시기가 제공됩니다( 숫자 체계의 기본 입니다 ). 예: 1000₁₀ 1000² 여기서 첫 번째 숫자는 친숙한 십진법 으로 천 단위이고, 아래쪽 숫자는 이진법으로 표현한 숫자이며 십진법으로도 동일합니다... 8 ! 십진법과 마찬가지로 이진법도 숫자를 숫자 로 분해합니다 . 이진수의 각 숫자를 비트 (또는 숫자 )라고 합니다. (관심 있는 사람이 있다면 4비트는 니블 (또는 테트라드), 8비트는 바이트 , 16비트는 워드 , 32비트는 더블 워드 입니다 .) 비트(숫자)도 0부터 시작하여 오른쪽에서 왼쪽으로 번호가 지정됩니다 (십진법과 달리). 최하위 , 최하위 오른쪽 비트의 시퀀스 번호는 0 입니다 . 다음은 첫 번째 비트, 두 번째 등입니다. 비트가 오래될수록중요 합니다(우리가 이해하는 십진법과 유사하게 - 숫자 1455에서 해당 비트를 제거하면 숫자 1450이 남게 됩니다). - 초기값과 거의 동일하지만, 수백자리를 빼면 1050이라는 숫자만 남게 되는데, 이는 이미 초기값과는 거리가 먼 숫자입니다. ). 예. 아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 2 맨 아래에는 이 소수 이진수의 비트가 빨간색으로 번호가 매겨져 있습니다. 총 18비트(자릿수)의 이 숫자가 있습니다. 앞으로는 분수가 완전히 다른 방식으로 컴퓨터 메모리에 저장된다는 점에 주목하고 싶습니다 . 이에 대해서는 나중에 논의하겠습니다. 그동안 한 숫자 체계에서 다른 숫자 체계로 숫자를 변환하는 방법을 알아봅시다. 2. 정수와 분수를 십진법에서 이진법으로 또는 그 반대로 변환합니다. 2.1 10진수를 2진수로 변환. 2.1.1 정수. 정수 십진수를 이진수 시스템으로 변환하려면 이 숫자를 2로 나누고 나머지를 적어야 합니다(숫자가 짝수인지 홀수인지에 따라 항상 0 또는 1과 같습니다). , 나눗셈 결과를 다시 2 로 나누고 나눗셈의 나머지 부분(0 또는 1)을 다시 적고 두 번째 나눗셈 결과를 다시 2로 나눕니다. 나눗셈 결과가 1이 될 때까지 이 방법을 계속합니다. 다음으로, 항상 1과 같은 가장 최근의 나누기 결과부터 시작하여 모든 결과 0과 1을 역순으로 기록합니다 . 중요 사항. ANY INTEGER를 2로 순차적으로 나눈 최종 결과는 항상 1이 됩니다! 결과가 1보다 크면 결과가 나올 때까지 이 결과를 2로 계속 나눕니다. 그리고 2로 나눈 결과는 한 가지 경우에만 0이 될 수 있습니다. 이는 0 자체를 2로 나눈 것입니다 . 예. 숫자 145를 십진법에서 이진법으로 변환해 보겠습니다. 145/2 = 72(나머지 1 ) 72/2 = 36(나머지 0 ) 36/2 = 18(나머지 0 ) 18/2 = 9(나머지 0 ) 9/2 = 4(나머지 1 ) 4/2 = 2 (나머지 0 ) 2/2 = 1 (나머지 0 ) 이제 이진수를 역순으로 "수집"합니다. 숫자 10010001 을 얻습니다. 완료되었습니다! 흥미로운 뉘앙스 1. 숫자 1을 십진법에서 이진법으로 변환해 보겠습니다 . 이진법에서는 이 숫자도 1로 쓰이게 됩니다 . 결국 1이 되어야 하는 2로 나눈 최종 결과는 이미 숫자 1 자체와 동일합니다. 1₁₀ = 1² 흥미로운 뉘앙스 2. 변환해 보겠습니다. 10진수에서 2진수로 숫자 0 을 표시합니다. 이진법에서는 이 숫자도 0으로 표시됩니다. 0₁₀ = 0₂ 2.1.2 분수. 분수를 이진수로 변환하는 방법은 무엇입니까? 소수를 이진수 시스템으로 변환하려면 다음을 수행해야 합니다. a) 단락 2.1.1에서 연구한 알고리즘에 따라 분수의 전체 부분을 이진 시스템으로 변환합니다 . b) 분수의 분수 부분 에 2를 곱하고 다음과 같이 씁니다. 소수점 이전 결과의 결과 숫자 (항상 논리적인 0 또는 1과 같음) 그런 다음 얻은 결과의 분수 부분에만 2를 다시 곱하고 결과의 결과 숫자를 소수점(0 또는 1) 앞에 기록하는 식으로 분수가 나올 때까지 계속합니다. 곱셈 결과의 일부는 0이 되거나 필요한 소수 자릿수 ( 정밀도 필요 )(2를 곱한 횟수와 동일)까지 됩니다. 그런 다음 실수(소수) 숫자의 정수 부분과 분수 부분을 구분하는 지점 뒤에 순서대로 0과 1이 기록된 결과 시퀀스를 적어야 합니다 . 예제 1. 숫자 2.25 (2포인트 25백분의 1)를 십진법에서 이진법으로 변환해 보겠습니다. 이진 시스템에서 분수는 10.01 과 같습니다 . 우리는 이것을 어떻게 얻었습니까? 숫자는 정수 부분(포인트까지)으로 구성됩니다. 이는 2이고 소수 부분은 0.25입니다. 1) 전체 부분의 번역: 2/2 = 1 (나머지 0 ) 전체 부분은 10 이 됩니다 . 2) 분수 부분의 번역. 0.25 * 2 = 0 .5 (0) 0.5 * 2 = 1 .0 (1) 2를 연속적으로 곱한 결과 소수부가 0이 되었습니다. 곱셈을 멈춥니다. 이제 순서대로 분수 부분을 "수집"합니다. 이진 시스템에서는 0.01을 얻습니다 . 3) 정수 부분과 분수 부분을 더합니다. 소수 부분 2.25 는 이진 부분 10.01 과 같습니다 . 예제 2. 숫자 0.116 을 10진수 체계에서 2진수 체계로 변환해 보겠습니다. 0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 (0) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) //이 결과의 정수 부분을 버립니다. 0.856 * 2 = 1 .712 (1 ) //이 결과의 전체 부분을 삭제합니다. 0.712 * 2 = 1 .424 (1) //이 결과의 전체 부분을 삭제합니다. 0.424 * 2 = 0 .848 (0) 보시다시피 곱셈은 계속됩니다. , 결과의 분수 부분은 0과 같지 않습니다. 그런 다음 (소수 부분에서) 점 뒤의 소수점 이하 7자리(비트)의 정확도로 소수 부분을 이진수로 변환하기로 결정합니다 . 중요하지 않은 비트 에 대해 연구한 내용을 기억해 봅시다 . 비트(비트)가 전체 부분에서 멀수록 이를 무시하기가 더 쉽습니다(강의 섹션 1의 설명, 잊어버린 사람). 점 뒤에 7비트의 정확도로 이진 분수 0.0001110을 얻습니다. 2.2 이진수를 십진수로 변환. 2.2.1 정수. 전체를 번역하려면이진수 체계에서 십진수로 숫자를 계산하려면 이 숫자를 숫자(비트)로 나누고 각 숫자(비트)에 숫자 2를 특정 양수 수준 까지 곱해야 합니다 (이 정도는 최하위 숫자부터 오른쪽에서 왼쪽으로 계산 되기 시작합니다). (오른쪽 비트) 0 ) 에서 시작합니다. 즉, 2의 거듭제곱은 주어진 비트의 수와 같습니다(그러나 이 기록되지 않은 규칙은 정수를 변환하는 경우에만 사용할 수 있습니다. 왜냐하면 분수의 경우 비트 번호 지정이 분수 부분에서 시작되기 때문입니다. 십진법으로 다르게 ). 다음으로 결과 제품을 합산해야 합니다 . 예. 이진수 110011 을 십진수 체계로 변환해 보겠습니다. 110011² = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*21 + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ 결과적으로 우리는 숫자 51을 얻습니다. 바이너리 시스템 . 자세한 내용은 숫자 2 의 첫 번째 거듭제곱에 대한 표를 참조하세요 . 아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 5 ! 숫자의 0승은 항상 1이라는 점에 유의하십시오 . 2.2.2 분수. 이진 분수(실수) 숫자를 십진수로 변환하려면 다음을 수행해야 합니다. a) 단락 2.2.1의 알고리즘에 따라 정수 부분을 십진수로 변환합니다 . b) 분수 부분 을 다음과 같이 번역합니다 . 분수 부분을 특정 의 거듭제곱으로 올려진 숫자의 곱의 합 으로 분수 부분을 표시해야 합니다 ( 점 뒤의 첫 번째 숫자에 대한 거듭제곱 (분수의 전체 부분 이후)은 -1과 같습니다. 점 뒤의 두 번째 숫자는 -2와 같습니다.) 결과적으로 이 금액은 십진법 숫자의 분수 부분이 됩니다. 예. 숫자 10111.01 을 이진법으로 변환해 보겠습니다. 10111.01² = (1*2⁴ + 0*2³ + 0*2² + 1*21 + 1*2°) . (0*2ˉ1 + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0.25) = 23.25₁₀ 결과적으로 십진수 체계에서는 23.25라는 숫자를 얻습니다. 2의 첫 번째 음수 거듭제곱 표는 다음과 같습니다. 2.2.3 숫자를 이진수에서 십진수로 변환하는 일반 공식. 숫자를 이진수에서 십진수(정수 및 분수 부분 모두)로 변환하는 일반 공식을 제시해 보겠습니다. 여기서 A 는 이진수 체계의 숫자입니다. 숫자 시스템의 기본은 2입니다 (각 비트에 2의 거듭제곱을 곱한다는 의미). N아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 7 아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 4— 정수 자릿수 (비트) ; m 은 숫자의 소수 자릿수(비트) 입니다 . 분할 지점의 정수 부분의 첫 번째 비트는 빨간색으로 강조 표시됩니다. 항상 0의 거듭제곱에 2를 곱합니다. 그 앞의 다음 비트(왼쪽)에 2의 1제곱을 곱합니다. 분할 지점에서 소수 부분의 첫 번째 비트는 녹색으로 강조 표시됩니다. 항상 2의 마이너스 1승을 곱합니다. 오른쪽의 다음 비트에는 2의 마이너스 2제곱이 곱해집니다. 3. 과학적 표기법: 두 시스템 모두에서 정규화된 표기법입니다. 가수, 지수, 지수의 정도. 3.1 숫자를 쓰는 지수형. 이전에는 위치 번호를 숫자별로 기록하는 자세한 방식을 연구했습니다 . 숫자 0.0000000000000000000016 을 보겠습니다 . 표준 형식 의 항목이 매우 깁니다 . 그리고 지수 형식에서는 다음과 같습니다: 1.6 * 10ˉ²¹ 그러면 숫자의 지수 형식은 무엇이며 이 형식으로 숫자를 표현하는 방법은 무엇입니까? 숫자에 대한 과학적 표기법은 실수를 가수지수 로 표현한 것입니다 . 아주 큰 숫자와 아주 작은 숫자를 표현하는 데 편리하며, 필기 내용을 통일하는데도 편리합니다. N = M * pⁿ 여기서 N 은 쓰려는 숫자, M 은 숫자의 가수 , p는 (주어진 숫자의 숫자 체계의 밑과 동일), n (정수)은 차수 (도) 입니다. , 양수 및 음수일 수 있음), p의 n 거듭제곱 은 특성 숫자 (지수, 즉 밑수(차수))입니다. 중요한 뉘앙스. 십진수의 정수 부분이 0과 다르면 지수 의 차수(차수)는 양수 가 되고 , 정수 부분이 0과 같으면 지수의 차수는 음수가 됩니다 . 3.2 숫자 쓰기의 일반 및 정규화된 형태. 숫자의 정규형은 가수(부호를 고려하지 않고)가 반구간 [0,1], 즉 0 <= M < 1에 위치하는 형식입니다. 이 형식의 쓰기는 단점: 일부 숫자는 모호하게 작성됩니다(예: 0.0001은 0.000001*10², 0.00001⋅101, 0.0001⋅10º, 0.001⋅10ˉ1 등으로 쓸 수 있음 ). 따라서 또 다른 형태의 녹음이 널리 퍼져 있습니다(특히 컴퓨터 과학에서)., 여기서 십진수의 가수는 1(포함)부터 10(제외)까지의 값을 취합니다. 즉, 1 <= M < 10입니다(마찬가지로 이진수의 가수는 1에서 2까지의 값을 취합니다). ). 즉, 10 진수 체계의 가수는 1.0(포함)에서 10(제외) 사이의 분수 여야 합니다 . 즉, 가수의 정수 부분은 한 자리 숫자를 포함해야 하며 소수 부분은 수학적으로 제한되지 않습니다. 정규화된 형식 의 장점은 모든 숫자(0 제외)가 고유한 방식으로 기록된다는 것입니다 . 단점은 이 형식으로 0을 표현하는 것이 불가능하다는 것입니다. 따라서 컴퓨터 과학의 숫자 표현은 숫자 0에 대한 특수 부호(비트)를 제공합니다. 3.3 지수 정규화 형식으로 십진수를 쓰는 예. 예를 살펴 보겠습니다 . 예 1. 십진수 1015000 (1백만 15000)을 지수 정규화 형식으로 작성해 보겠습니다. 이 숫자의 숫자 체계는 10진수이므로 밑은 10이 됩니다 . 가수를 선택해 봅시다 . 이렇게 하려면 숫자를 분수로 상상해 보세요. 분수 부분은 0(숫자는 정수이므로)과 같습니다. 1000000.0. 숫자의 정수 부분이 0 보다 큰 경우 정수 부분에 숫자가 하나만 남을 때까지 점을 초기 위치(정수 부분 내부)의 왼쪽으로 이동합니다 . 그 뒤에 마침표를 찍습니다. 숫자 끝의 중요하지 않은 0은 삭제됩니다. 우리는 1.015 와 같은 숫자의 가수를 얻습니다 . 숫자의 밑의 정도(순서)를 결정해 봅시다 . 정수 부분과 분수 부분을 구분하는 점이 왼쪽으로 몇 자리 이동했습니까? 6개의 위치에 대해. 이는 순서가 6 이 됨을 의미합니다 . 이 경우 순서는 양수입니다 (0이 아닌 숫자의 정수 부분에서 점을 이동했습니다). 정규화된 형식의 최종 항목: 1.015 * 10⁶ . 이 숫자는 1.015E6 형식으로 쓸 수 있습니다 (여기서 E6은 10 진수 의 지수 , 즉 10의 6승). 우리 자신을 시험해 봅시다 . 숫자에 대한 지수 표기법은 숫자(가수)와 다른 숫자(지수)의 곱에 지나지 않습니다. 1.015에 10⁶을 곱하면 어떻게 되나요? 1.015*10⁶ = 1.015*1000000 = 1015000 . 좋아요. 이 접근 방식 (정규화) 은 명확한 기록을 생성하는 데 도움이 됩니다. 위에 표시된 대로 지수 형태의 숫자입니다. 예 2. 십진수 실수 0.0098 을 정규화된 형태로 작성해 보겠습니다 . 숫자의 밑수를 강조해 보겠습니다 . 숫자는 10 (십진수 체계) 과 같습니다 . 숫자의 가수를 선택해 보겠습니다 . 9.8 과 같습니다 (숫자의 정수 부분은 0입니다. 즉, 점을 오른쪽 첫 번째 유효 숫자(1에서 9까지의 범위에 있음)로 이동함을 의미합니다. . 숫자의 순서를 결정합니다 . 점을 세 위치만큼 이동했습니다. 즉 순서는 3 입니다. 양수 는 음수입니까, 음수입니까? 점을 오른쪽(숫자 소수 부분)으로 이동했으므로 차수(제곱)는 음수 입니다 . 정규화된 형태의 숫자의 최종 기록은 9.8 * 10ˉ³ 또는 9.8E-3 입니다 . 다시 확인해 보겠습니다. 9.8에 10ˉ³를 곱합니다. 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.0098 . 맞습니다. 예 3. 정규화된 형식으로 십진수 실수 3.56을 작성해 보겠습니다. 숫자의 밑수를 선택하세요 - 10 과 같습니다 (십진수 시스템). 숫자의 가수를 선택하세요 . - 그것은... 3.56 (정수) 숫자의 일부는 0이 아닌 한 자리 숫자입니다. 즉, 점을 어디로든 이동할 필요가 없으며 숫자 자체가 가수가 됩니다.) 밑의 순서를 강조해 보겠습니다. 가수는 어떤 숫자로 해야 합니까? , 숫자 자체와 동일하므로 변경되지 않도록 곱해야 합니까? 유닛 당. 이는 순서가 0이 됨을 의미합니다. 정규화된 형태의 숫자의 최종 기록은 3.56 * 10º 또는 3.56E0입니다. 4. 컴퓨터 메모리에 실수 저장: float 및 double. 4.1 float 및 double 유형. 강의의 핵심 부분으로 넘어가겠습니다. 우리가 이미 알고 있듯이 Java에는 floatdouble 이라는 두 가지 유형의 실수가 있습니다 . float 유형은 컴퓨터 메모리에서 32비트를 차지 하며 [3.4E-38; 3.4E+38) (즉, 3.4*10ˉ³⁸(포함)에서 3.4 * 10³⁸(제외) 범위). 중요한 뉘앙스 1. 플로트 숫자는 양수일 수도 있고 음수일 수도 있습니다. 위의 이 범위는 부동 소수점 범위에 포함된 숫자의 모듈을 나타내기 위해 표시됩니다. 중요한 뉘앙스 2. 10³⁸ 는 각각 2¹²⁷ 와 대략 같고 , 10 ˉ³⁸ 은 2ˉ1²⁷ 와 대략 같습니다 . 따라서 부동 소수점 숫자의 절대값 간격은 [3.4 * 2ˉ1²7; 3.4 * 2¹²²). double 형은 컴퓨터 메모리를 2배 정도 차지합니다.64비트 이며 [-1.7E+308; 범위의 10진수 값을 허용할 수 있습니다. 1.7E+308) 입니다. 4.2 이진수의 지수 정규화된 형태. 우리는 숫자가 컴퓨터 메모리에 이진 형식으로 저장된다는 것을 알고 있습니다. 따라서 숫자 1560.256 (float 유형)을 위치 형식의 이진 시스템으로 변환해 보겠습니다. 11000011000.01000001100 . 이것이 컴퓨터 메모리에 저장되는 방식이라고 생각할 수도 있습니다. 하지만 그것은 사실이 아닙니다! 컴퓨터 메모리에서 floatdouble 유형 ( 실제 부동 소수점 유형 )은 지수 정규화된 형식 으로 저장되지만 거듭제곱의 기준은 10이 아닌 2입니다 . 이는 위에서 언급한 것처럼 모든 데이터 가 컴퓨터 메모리에 저장된다는 사실 때문입니다. 컴퓨터는 이진 형식(비트)으로 표시됩니다. 특정 양의 컴퓨터 메모리가 숫자에 할당됩니다. 정규화된 지수 형식인 1.52*101 로 양수 15.2를 표현해 보겠습니다 . 다음으로, 동일한 알고리즘을 사용하여 지수 정규화 표기법으로 이진 "쌍둥이" 1111.00110011001 을 표현해 보겠습니다. 1) 밑수는 2와 같습니다. 2) 가수는 1.11100110011001과 같습니다. 3) 차수는 양수이고 3과 같습니다. (포인트가 왼쪽으로 3비트 이동됨) 10진수 시스템. 이를 이진 시스템으로 변환해 보겠습니다. 11 . 따라서 이진 지수 정규화 형식에서는 1.11100110011001 * 211이 됩니다 . 4.3 컴퓨터 메모리에 부동 소수점 숫자 의 지수 정규화된 이진 형식 저장 . 그래서 우리는 실수가 지수 정규화된 이진 형식 으로 컴퓨터 메모리에 저장된다는 것을 알아냈습니다 . 기억 속에는 어떻게 보일까요? float 유형을 사용하겠습니다 . 컴퓨터는 각 부동소수점 숫자에 32비트를 할당합니다 . 그것들은 다음과 같이 배포됩니다 . 이 그림은 컴퓨터의 32비트 부동 소수점 숫자에 할당된 메모리를 개략적으로 보여줍니다. 비트 번호는 빨간색으로 표시됩니다 . 녹색은 숫자의 부호를 저장하기 위해 할당된 메모리 조각(1비트)을 나타냅니다. 노란색은 숫자(8비트)의 이동된 거듭제곱(순서)을 저장하기 위해 할당된 메모리 조각을 나타냅니다. 파란색 아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 5 암시적 단위(23비트) 없이 숫자의 정규화된 가수를 저장하기 위해 할당된 메모리 조각을 나타냅니다. 좀 더 자세히 살펴보겠습니다. 1) 서명 비트. 가장 중요한(왼쪽에서 첫 번째) 비트는 항상 숫자의 부호를 저장하기 위해 할당됩니다(숫자가 음수이면 1, 양수이면 0). 프로그래밍에서 숫자 0은 예외일 수 있으며 , 0은 음수가 될 수도 있고 양수가 될 수도 있습니다 . 2) 다음은 밑이 2 인 지수 의 차수(순서) 비트입니다 . 이를 위해 8비트가 할당됩니다. 우리가 알고 있듯이 float 숫자 의 지수 차수 는 음수 (정수 부분이 0인 숫자의 경우 단락 3.3 참조)와 양수(정수 부분이 0과 다른 숫자의 경우)일 수 있으며 범위는 2ˉ1²7에서 21²7까지입니다 . 이론적으로는 부호 비트의 경우와 마찬가지로 지수의 부호를 결정하기 위해 1비트를 할당해야 합니다. 그러나 그것은 사실이 아닙니다. 지수의 부호를 결정하는 데 비트를 낭비하지 않기 위해 부동 소수점 숫자는 반바이트 +127(0111 1111)의 지수에 오프셋을 추가합니다 . 따라서 2ˉ1²⁷에서 21²7까지의 거듭제곱 대신 컴퓨터는 0에서 +254까지의 거듭제곱 범위를 저장합니다 . 모든 전력 값은 양수이므로 부호에 추가 바이트를 낭비할 필요가 없습니다. 지수의 값은 가능한 값에 비해 절반만큼 이동한 것으로 나타났습니다. 이는 지수의 실제 값을 얻으려면 메모리에 저장된 값에서 이 오프셋을 빼야 함을 의미합니다. 메모리에 저장된 지수 값이 오프셋(+127)보다 작으면 지수는 음수입니다. 이는 논리적입니다. 예. 음수 -18 의 이동을 수행해 보겠습니다 . 여기에 오프셋 +127을 추가하면 +108도 값을 얻습니다(계산에서 0도를 잊지 마세요). 학위를 이진 형식으로 변환해 보겠습니다. 1101100 그러나 학위에는 8비트의 메모리가 할당되어 있으며 여기서는 7비트 숫자를 얻습니다. 비어 있고 비어 있는 상위 숫자(비트) 대신에 컴퓨터는 0을 추가합니다. 결과적으로 이 정도는 컴퓨터 메모리에 01101100 으로 저장됩니다 . 보시죠: +108 < +127, 이는 정도가 실제로 음수임을 의미합니다. 다음 흥미로운 표를 고려하십시오. 이진 및 십진 시스템에서 정규화된 부동 소수점 숫자의 거듭제곱에 대한 가능한 모든 값을 보여줍니다. 보시다시피, 이진 시스템에서 +127은 정확히 전체 바이트(8비트)의 절반입니다. 3) 나머지 23비트는 가수용 으로 예약되어 있습니다. 아직 읽지 마세요 :))) 컴퓨터 메모리의 실수입니다.  개발중인!!!  - 열하나. 그러나 정규화된 이진 가수의 경우 최상위 비트(정규화된 가수의 정수 부분이라고도 함)는 가수 의 수가 범위 1<=M<2 (및 또한 강의의 단락 2.1.1을 기억하십시오). 유일한 예외는 숫자 0입니다. 할당된 23비트에 단위를 쓰고 메모리를 낭비하는 것은 의미가 없으므로 나머지 가수 (소수 부분)가 할당된 23비트에 기록됩니다. 본질적으로 float 숫자의 유효 부분은 24의 길이를 가지며 그 중 한 비트가 덜 저장됩니다. 중요한 뉘앙스. 십진수 분수를 이진수로 변환할 때 이진수 시스템의 분수 부분이 종종 큰 것으로 판명되었음을 기억합시다. 그리고 부동 소수점 숫자를 저장하는 데에는 32비트만 있습니다. 이 경우 이진 분수의 최하위, 최하위 숫자(이 강의의 2.1.2항을 기억하세요)는 할당된 메모리에 포함되지 않으며 컴퓨터는 이를 무시 합니다 . 숫자의 정확성은 상실되지만 , 보시다시피 최소 수준입니다. 즉, 분수 부동 소수점의 정밀도는 소수점 이하 6~7 자리 입니다 . 4.4 컴퓨터 메모리에 double형 숫자의 지수 정규화된 이진 형식을 저장합니다 . double 유형의 실수는 일부 특성을 제외하고 부동 소수점 숫자와 동일한 방식으로 컴퓨터 메모리에 저장됩니다 . double 숫자는 컴퓨터 메모리에 64비트를 갖습니다. 이는 다음과 같이 배포됩니다(또한 왼쪽에서 오른쪽 순서로). 1) 부호 비트 (4.3항 참조). 우리는 이 비트의 수가 63이 될 것이라는 것을 알고 있습니다 . 2) 학위(순서). 이중 숫자에는 이를 저장하기 위해 11비트가 할당됩니다 . 각도 이동 도 수행되지만 이중 숫자의 경우 +1023과 같습니다 . 3) 가수(중요부분). 이중 숫자에는 이를 저장하기 위해 52비트 (자리) 가 할당됩니다 . 또한 가수( 암시적 단위 )의 정확한 정수 부분은 메모리에 저장 되지 않습니다 . 분수 복식의 정밀도가 소수점 이하 16자리 정도 라는 점도 주목할 가치가 있습니다 . 4.5 컴퓨터 메모리에서 십진법의 실수를 표현하는 예 그리고 우리 강의의 마지막 요점은 주제에 대한 이해를 강화하기 위해 십진수 체계의 분수를 컴퓨터 메모리에 저장하는 형태로 변환하는 예가 될 것입니다. 예시 1. 숫자를 선택하세요 -4.25 플로트 유형. 이번 강의에서 다룬 내용을 모두 기억하면서 이진수 체계의 지수 정규화된 형태로 표현해 보겠습니다. 1) 숫자의 정수 부분을 이진 형식으로 변환합니다 . 4/2 = 2(나눗셈 0 의 나머지 ) 2/2 = 1 (나눗셈 0 의 나머지) 정수 부분은 이진법 으로 100 과 같습니다 . 2) 숫자의 분수 부분을 이진 형식으로 변환합니다 . 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) 이진법에서 분수 부분은 0.01 과 같습니다 . 3) 따라서 -4.25₁₀ = -100.01₂ 입니다 . 4) 숫자 -100.01²를 이진수 체계의 지수 정규화된 형태 로 변환해 보겠습니다 (즉, 밑수는 2가 됩니다). -100.01₂ = -1.0001 *2² 도의 값을 10진수 형식에서 2진수 로 변환해 보겠습니다 . 2/2= 1 (나머지 0 ) 도는 102입니다. 이진 지수 정규화 형식의 숫자 -4.25₁₀는 -1.0001 * 21º 와 같습니다. 컴퓨터 메모리에서 어떻게 보일지 적어 보겠습니다 . 부호 비트는 1 (음수) 입니다 . 지수 오프셋은 2+127 = 129₁₀ = 10000001₂ 와 같습니다. 가수 에서 암시 적 오프셋을 제거하면 00010000000000000000000을 얻습니다 ( 사용되지 않은 하위 비트를 0으로 채웁니다 ). 결론. 1 10000001 00010000000000000000000 - 숫자 -4.25가 컴퓨터 메모리에 저장되는 방식입니다. 예 2. 부동 소수점 숫자 0.75₁₀ 를 컴퓨터 메모리의 이진 저장 형식으로 변환합니다 . 결과는 0 01111110 100000000000000000000000 이어야 합니다 . 관심을 가져주셔서 감사합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION