3장: 마이크로프로세서의 이진수 연산

3jang Maikeulopeuloseseoui Ijinsu Yeonsan



3장: 마이크로프로세서의 이진수 연산

3.1 소개

컴퓨터에서 산술 연산은 8비트, 16비트, 32비트 또는 64비트로 수행됩니다. 이진수로 3과 같은 숫자는 11입니다. 연산이 8비트로 수행된다면 이는 00000011로 간주됩니다. 앞에는 0이 0입니다.







10000101과 같은 이진수의 경우 가장 중요한 비트는 가장 왼쪽에 있는 비트입니다. 이 경우에는 1입니다. 최하위 비트는 숫자에 대해 여전히 1인 오른쪽의 맨 끝 비트입니다. 최상위 비트는 MSB로 약칭됩니다. 최하위 비트는 LSB로 축약됩니다.



BInary DigiT는 BIT로 줄여서 간단히 비트라고 씁니다. 숫자 10010011에서 1 또는 0은 각각 비트입니다. 4개의 비트 그룹을 니블(nibble)이라고 합니다. 8비트 그룹을 바이트라고 합니다. 바이트는 두 개의 니블로 구성됩니다. 낮은 니블은 LSB에 대한 니블이고, 높은 니블은 MSB에 대한 니블입니다.



8비트, 16비트, 32비트 또는 64비트 그룹은 해당 그룹이 단순히 숫자를 나타내는 것 이상의 정보를 전달하는 한 단어라고 합니다. 예를 들어 컴퓨터의 하위 수준 명령인 경우 그룹을 단어라고 합니다. 24비트라는 단어도 있지만 오늘날에는 일반적으로 사용되지 않습니다.





엔디안은 바이트가 단어를 형성하는 순서를 나타냅니다. 24비트 단어인 100100001111010100100010을 생각해 보세요. 이 단어는 다음과 같은 3바이트로 구성됩니다.

10010000 11110101 00100010



가장 중요한 바이트는 가장 왼쪽의 바이트입니다. 맨 왼쪽의 바이트가 최상위 바이트이고 맨 오른쪽의 바이트가 최하위 바이트인 경우 이를 빅 엔디안 단어 표현이라고 합니다. Little Endian 표현은 그 반대입니다.

컴퓨터 메모리는 일련의 셀로 구성되며 각 셀은 바이트를 보유합니다. 컴퓨터 메모리의 첫 번째 셀은 바이트 0용, 두 번째 셀은 바이트 1용, 세 번째 셀은 바이트 2용 등입니다. 빅 엔디안의 경우 이전 단어의 경우 최상위 바이트는 바이트 0 셀에 저장되고 중간 바이트는 바이트 1 셀에 저장되며 최하위 바이트는 바이트 2 셀에 저장됩니다. 이는 하위 메모리 셀에 더 중요한 바이트가 있음을 의미합니다.

이전 24비트 워드는 다음과 같이 바이트의 역순으로 쓸 수 있습니다.

00100010 11110101 10010000

이제 최하위 바이트는 맨 왼쪽에 있고 가장 중요한 바이트는 맨 오른쪽에 있습니다. 가장 왼쪽의 바이트가 최하위 바이트이고 맨 오른쪽의 바이트가 최상위 바이트인 경우 이는 단어의 Little Endian 표현입니다. 리틀 엔디안을 사용하고 이전 단어의 경우 최하위 바이트는 바이트 0 셀에 저장되고 중간 바이트는 바이트 1 셀에 저장되며 최상위 바이트는 바이트 2 셀에 저장됩니다. 이는 하위 메모리 셀에 덜 중요한 바이트가 있음을 의미합니다.

엔디안은 바이트의 비트에 사용되지 않습니다. 또한 바이트의 니블에도 사용되지 않습니다. 바이트 순서에만 사용됩니다.

수직선
부호가 없는 숫자는 양수입니다. 양수는 0부터 위쪽으로 올라가는 숫자입니다. 음수도 존재합니다. 수직선에는 양수와 음수가 표시될 수 있습니다. 다음 수직선은 0에 가까운 양수 및 음수 정수(정수)를 보여줍니다.

음수는 0부터 아래쪽(왼쪽)으로 감소합니다. 많은 상황에서 0은 양수로 간주됩니다. 그러나 어떤 상황에서는 부정적인 것으로 간주됩니다. 그렇기 때문에 다이어그램에서 낮은 번호 매기기의 0 앞에 더하기 및 빼기 기호가 있습니다. 숫자가 양수이면 해당 부호를 생략할 수 있습니다. 이는 다이어그램의 위쪽 번호에 대한 경우입니다. 음수 앞의 빼기 ​​기호는 절대 생략되지 않습니다.

3.2 이진수의 덧셈

추가로:

A + B = S

A를 피가수, B를 가수, S를 합이라고 합니다.

2진수의 다음 두 양수 추가를 고려하세요.

2진법에서 가능한 숫자는 0과 1뿐입니다. 2진법의 덧셈은 10진법의 덧셈과 유사하지만 2진법의 2는 1-0(10)입니다. 한 열의 두 비트 합이 10이면 0이 기록되고 바로 왼쪽 열에 1이 전달됩니다. 거기에 있는 두 비트의 합에 더해져야 합니다. 총 합이 3이면 2진법으로 11을 의미합니다. 11 중 오른쪽 1이 기록되고 왼쪽 1이 바로 왼쪽 열 비트의 합에 추가되기 위해 전달됩니다. 두 경우 모두 왼쪽으로 1을 옮기는 것을 캐리라고 합니다.

이전 덧셈표를 오른쪽부터 읽어오면 두 번째 열(오른쪽부터)에는 1+1 = 10의 캐리가 있습니다. 세 번째 열에는 1+1+ 캐리의 결과인 캐리가 있습니다. 1 = 11. 네 번째 열에는 1 = 10의 0+1+ 캐리로 인한 캐리가 있습니다. 다섯 번째 열에서는 합산이 1 = 1의 0+0+ 캐리이므로 캐리가 없습니다. 나머지 열에는 캐리가 포함되지 않습니다.

열 계산은 오른쪽 끝부터 시작됩니다. 16비트 덧셈을 사용하면 8번째 열에서 9번째 열(왼쪽으로 이동)로 캐리가 발생할 수 있습니다. 다음 표에서는 이를 보여줍니다.

산술 및 논리 연산은 컴퓨터 마더보드의 마이크로프로세서에서 수행됩니다.

8비트 워드 컴퓨터의 경우 캐리는 하드웨어에 의해 자동으로 8번째 비트에서 9번째 비트로 이동할 수 없습니다. 따라서 이러한 컴퓨터에 두 개의 16비트 그룹을 추가하려면 8-8비트 쌍에서 두 번 추가해야 합니다. 캐리는 소프트웨어(프로그래밍)에 의해 이동되고 영향을 받습니다.

두 개의 숫자를 더하려면 숫자를 더하기 전에 먼저 2의 보수 형식(아래 참조)으로 변환할 수 있습니다.

3.3 2의 보수와 이진수의 뺄셈

컴퓨터의 마더보드에는 메모리가 있고, 마이크로프로세서와 기타 회로가 있습니다. 메모리는 일련의 8비트 셀입니다. 바이트의 경우 각 비트가 셀에 들어갑니다. 마이크로프로세서에는 몇 가지 메모리 유형 위치가 있습니다. 이러한 메모리 유형 위치를 레지스터라고 합니다. 따라서 컴퓨터에서는 바이트 그룹이 메모리나 마이크로프로세서의 레지스터에 일시적으로 저장될 수 있습니다.

이러한 저장소 중 하나에서 각 셀은 1 또는 0을 가질 수 있으며 그 외에는 아무것도 사용할 수 없습니다. 인생에는 양수와 음수가 있습니다. 양수는 더하기 기호(+)로 시작하고 음수는 음수 기호(-)로 시작합니다. 기호가 생략되면 숫자는 양수로 간주됩니다.

컴퓨터에서 숫자의 부호를 나타내는 문제를 해결하기 위해 정수가 범위에 저장됩니다. 정수는 정수입니다. 8비트를 사용하여 가능한 숫자의 범위를 저장하는 경우 가장 왼쪽 비트가 부호 비트로 사용됩니다. 숫자가 0으로 시작하면 숫자는 양수입니다. 1로 시작하면 숫자는 음수입니다. 16비트를 사용하여 가능한 숫자의 범위를 저장하는 경우 가장 왼쪽 비트가 부호 비트로 사용됩니다. 숫자가 0으로 시작하면 숫자는 양수입니다. 1로 시작하면 숫자는 음수입니다. 이 형식의 숫자를 부호 있는 숫자라고 합니다.

실제로는 8비트, 16비트, 32비트, 64비트에 대해 부호 있는 숫자가 있을 수 있습니다. 사용되는 비트 수가 많을수록 저장할 수 있는 숫자의 범위가 커집니다.

2의 보수 정수
2의 보수를 사용하면 양수는 가장 왼쪽 숫자가 0이라는 점을 제외하면 일반적인 계산 숫자입니다. 주어진 양수에 해당하는 음수를 얻으려면 숫자의 각 비트를 반전하고 결과에 1을 더합니다. 0의 반전 또는 보수는 1입니다. 1의 반전 또는 보수는 0입니다. 다음 표는 해당 범위에 있는 일부 2의 보수를 보여줍니다.

표 3.31
2비트의 2의 보수 정수
바이너리 소수
01 +1
00 +0
열하나 -1
10 -2

양의 이진수는 00과 01(0과 1)입니다. 가장 왼쪽 비트에서 0은 양수임을 나타냅니다. 00은 다소 범위의 중간에 있습니다. -1을 얻으려면 숫자 01의 반전이 10이라는 것을 알 수 있습니다. 여기에(맨 오른쪽) 1을 더하면 11이 됩니다.

2개의 비트를 사용하므로 01, 00, 11에 해당하는 +1, +0, -1의 숫자로 구성된 범위의 숫자를 나타내는 데는 1비트만 남습니다. 첫 번째 비트는 부호를 나타냅니다. +2에 대한 10은 이 세 개의 이진수 중 하나가 아닙니다. 10은 1로 시작합니다. 이는 2의 보수에서 음수여야 함을 의미합니다. 따라서 10이 범위에 포함되며 이는 -2를 의미합니다.

2의 보수에 2비트가 있을 때 표현할 수 있는 모든 정수(양수 및 음수)의 수는 2입니다. 2 = 2가 아닌 4 2 -1 = 3. 2의 음수인 마지막 음수를 포함하면 미묘한 차이가 발생합니다. 숫자로 – 1. 이 경우 -2 2-1 = -2 1 = -2. 2비트의 2의 보수 범위에는 +2가 없습니다.

표 3.32
4비트의 2의 보수 정수
바이너리 소수
0111 +7
0110 +6
0101 +5
0100 +4
0011 +3
0010 +2
0001 +1
0000 +0
1111 -1
1110 1110
1101 -삼
1101 -삼
1100 -4
1011 -5
1010 -6
1001 1001
1000 -8

양의 이진수는 0000부터 0111까지(0부터 7까지)입니다. 가장 왼쪽 비트에서 0은 양수임을 나타냅니다. 0000은 범위의 중간에 있습니다. -1을 얻으려면 숫자 0001의 반전이 1110이 됩니다. 여기에 1을 더하면(맨 오른쪽) 1111이 됩니다. -2를 얻으려면 0010의 반전이 1101이 됩니다. 여기에 1을 더하면( 맨 오른쪽부터)는 1110입니다. -3에서 -7까지의 다른 음수 이진수도 비슷하게 결정됩니다.

4비트가 사용되므로 +7, +6, +5, +4, +3, +2, +1, +0, -1, -2, - 범위의 숫자를 나타내기 위해 3비트가 남습니다. 3, -4, -5, -6 및 -7은 0111, 0110, 0101, 0100, 0011, 0010, 0001, 0000, 1111, 1110, 1101, 1100, 1011, 1010 및 1001에 해당합니다.

1000에 해당하는 -8은 별도로 처리해야 합니다. 이 모든 숫자의 첫 번째 비트는 양수의 부호가 0이고 음수의 부호가 1임을 나타냅니다. 공교롭게도 1000은 이 14개의 이진수 중에 포함되지 않습니다. 1000은 1로 시작합니다. 즉, 2의 보수에 관한 한 음수여야 합니다. 따라서 1000이 범위에 포함되어 -8을 의미합니다.

2의 보수에 4비트가 있을 때 표현할 수 있는 모든 정수(양수 및 음수)의 수는 2입니다. 4 = 2가 아닌 16 4 – 1 = 15. 뉘앙스는 2의 음수인 마지막 음수를 포함함으로써 발생합니다. 번호너비 – 1. 이 경우 -2 4 -1 = -2 = -8. 숫자 범위에는 +8이 없습니다.

2의 보수에서 2, 4 및 더 넓은 비트에 대한 이전 분석은 8비트, 16비트, 32비트 및 64비트 폭의 이진수에 적용될 수 있습니다.

2의 보수는 양수의 부호 0과 음수의 부호 1을 위해 첫 번째(가장 왼쪽) 비트를 희생합니다. 'n' 비트 폭의 비트 그룹에는 2개의 비트가 있습니다. N 총 양수와 음수. 2가 되겠네요 N -1, 행운의 마지막(가장 작은) 음수가 포함되지 않았습니까? 가장 높은 양수는 +2입니다. n-1 -1이고 가장 작은 음수는 -2입니다. n-1 -1. -2가 될 것이다 n-1 -1, 운이 좋은 사람이 아니었다면 -2 n-1 포함됩니다.

2의 보수에서 숫자 빼기
뺄셈:

A – B = D

A를 피감수, B를 감수, D를 차이라고 합니다.

하나의 양의 이진수를 다른 양의 이진수에서 빼기 위해 피감수는 2의 보수로 작성되고 빼기는 음의 2의 보수 값으로 변환됩니다. 따라서 수학적 진술은 다음과 같습니다.

A+ – B = D

즉, 2의 보수 뺄셈에서는 감수를 음수로 변환한 후 피감수에 더합니다.

예제 3.31:
4비트를 사용하여 2의 보수로 다음 십진수 표현을 평가합니다.

6 – 4

해결책:
6의 이진수는 110입니다. 4비트 2의 보수에서는 0110입니다. +4의 이진수는 100입니다. 4비트 2의 보수에서는 0100입니다. 2의 보수에서는 음수 4로 변환해야 하는 0100입니다. 0100의 보수 또는 반전은 1011입니다. 덧셈처럼 오른쪽 끝에서 1을 더하면 1100이 됩니다. 따라서 십진수 표현은 다음과 같습니다.

6 – 4는 다음과 같습니다:

0110 – 0100입니다.

0110 +(– 0100) = 0110 + 1100 이전 덧셈 섹션에서와 같이 다음과 같이 수행됩니다.

참고: 0110 +(– 0100)은 6 + – 4와 동일합니다.

2의 보수 빼기를 사용하면 마지막 열 이후의 왼쪽 캐리는 덧셈에서 버려집니다. 십진수로 뺄 때 수학적 설명은 다음과 같습니다.

6 – 4 = 2

2의 보수에서 동일한 작업을 수행하면 답은 0010이며 2의 보수 이진수 계산에서 +2입니다. 이전 뺄셈은 더 큰 숫자에서 더 작은 숫자를 뺍니다. 다음 예에서는 더 작은 숫자에서 더 큰 숫자를 뺍니다. 표 3.32를 참조하여 0010이 실제로 +2와 동일한 2의 보수인지 확인할 수 있습니다.

예제 3.32:
4비트를 사용하여 2의 보수로 다음 십진수 표현을 평가합니다.

4 – 6

해결책:
4의 이진수는 100입니다. 4비트 2의 보수에서는 0100입니다. +6의 이진수는 110입니다. 4비트 2의 보수에서는 0110입니다. 0110은 2의 보수에서 -6으로 변환되어야 합니다. 0110의 보수 또는 반전은 1001입니다. 이전 추가에서 했던 것처럼 오른쪽 끝에서 1을 추가하면 1010이 됩니다. 따라서 십진수 표현은 다음과 같습니다.

4 – 6은 다음과 같습니다:

0100 – 0110입니다.

0100 +(– 0110) = 0100 + 1010 이전 추가 섹션에서와 같이 다음과 같이 수행됩니다.

참고: 4+ – 6은 0100 +(– 0110)과 동일합니다.

2의 보수 빼기를 사용하면 마지막 열 이후의 왼쪽 캐리는 덧셈에서 버려집니다. 십진수로 뺄 때 수학적 설명은 다음과 같습니다.

4 – 6 = -2

2의 보수에서 동일한 작업을 수행하면 답은 1110입니다. 이는 2의 보수 이진수 계산에서 -2입니다. 표 3.32를 참조하여 1110이 실제로 -2와 동일한 2의 보수인지 확인할 수 있습니다.

3.4 이진수의 곱셈

성명서에서 :

A x B = P

A를 피승수, B를 승수, P를 곱이라고 합니다. A x B 표현은 A와 B가 정수(정수)일 때 A, B를 여러 번 더한다는 뜻입니다.

이진수에서의 곱셈은 십진수에서의 곱셈과 같습니다. 그러나 10진수로 수행하는 대신 2진수로 수행됩니다. 42 x 10의 십진수 표현의 곱셈은 다음과 같이 이진수로 수행됩니다. 여기서 42 10 = 101010 2 그리고 10 10 = 1010 2 :

추가된 4개의 숫자를 부분곱이라고 합니다. 정답은 바로 제품입니다. 부분곱의 추가는 앞에서 설명한 것과 같은 방식으로 수행됩니다.

곱셈은 ​​다음과 같이 볼 수도 있습니다. 이 기본 2 곱셈에서 승수의 비트(숫자)가 1인 경우 부분 곱의 최하위 비트는 바로 아래에 다시 입력되는 피승수의 최하위 비트입니다. 피승수의 나머지 비트는 왼쪽으로 반복됩니다. 이 기본 2 곱셈에서 승수의 비트(숫자)가 0이면 부분 곱은 0으로 구성되며 그 바로 아래에 최하위 비트가 0입니다. 모든 0의 수는 피승수의 비트 수입니다.

3.5 이진수의 나눗셈

성명서에서 :

A ¼ B = Q

A를 배당금, B를 제수, P를 몫이라고 합니다. 몫에는 나머지가 동반될 수 있습니다. A ¼ B 표현식은 B를 추가하여 A를 주거나 A에 가까워져서 나머지가 B보다 작도록 몇 번 더할 수 있는지를 의미합니다.

나눗셈은 다양한 방법으로 이루어질 수 있습니다. 여기에 표시된 구분은 복원 구분입니다.

부서 복원
이것이 학교에서 배우는 장제법이다. 237을 6으로 나누면 답은 39가 되고 나머지는 3이 됩니다. 237 10 기본 2의 값은 11101101입니다. 2 그리고 6 10 2진수는 110이다 2 . 39 10 기본 2는 100111입니다. 2 그리고 3 10 2진수는 11이다 2 .

그래서 11101101 2 110으로 나누기 2 100111을 제공합니다 2 나머지 11 2 기본 2에서. 복원 방법을 사용하면 이진수는 일반 숫자이므로 반드시 2의 보수일 필요는 없습니다. 다음 구조는 11101101을 나눕니다. 2 110까지 2 100111을 주다 2 나머지 11 2 :

뺄셈은 2의 보수를 사용하지 않고 일반적으로 수행됩니다. 이것은 2진법이므로 빌림은 10이 아닌 2입니다. 부분 배당금은 10, 101, 1011, 1010, 1001입니다. 나머지는 11입니다. 제수는 세 자리이므로 나눗셈은 기본적으로 주어진 피제수에서 세 자리 그룹으로 이루어집니다. 몫은 정수(정수)이며, 이 문제의 경우 100111입니다. 몫과 나머지 결과는 예상한 대로입니다.

3.6 소프트웨어와 하드웨어를 이용한 산술 연산

컴퓨터 마더보드에는 시계가 있습니다. 시계의 틱을 펄스라고 합니다. 각 클록 펄스마다 마더보드의 여러 위치에서 하나 이상의 결정이 내려집니다. 그것은 프로그래밍(소프트웨어)과 관련이 있습니다.

마이크로프로세서 내부에는 조합 논리 회로와 순차 논리 회로라는 두 가지 종류의 회로가 있습니다. 멀티플렉서라고 불리는 또 다른 종류의 회로가 있습니다. 덧셈, 곱셈, 나눗셈은 조합 논리(회로)를 사용하여 하나의 클럭 간격 내에서 발생할 수 있습니다. 프로그래밍(소프트웨어)은 순차 논리 회로와 멀티플렉서를 사용하여 각 클록 펄스에서 결정을 내립니다.

2의 보수를 사용하여 뺄셈을 수행하는 경우 최소 2개의 클럭 펄스가 필요합니다. 첫 번째 클록 펄스에서 멀티플렉서는 서브핸드를 NOT 게이트 세트(자리당 하나의 NOT 게이트)로 채널링합니다. 두 번째 클록 펄스에서 조합 논리는 NOT 게이트의 출력에 1을 추가하고 결과 감산 및 감산을 계속 추가합니다. 모든 추가는 하나의 클럭 간격 내에 발생할 수 있습니다.

진리표를 사용한 프로그래밍에서는 덧셈, 곱셈, 나눗셈이 여전히 중단될 수 있습니다. 하지만 본 온라인 진로과정에서는 다루지 않습니다.

3.7 마이크로프로세서의 논리 연산

AND, OR, XOR 및 반전

그리고
다음 표에서는 비트별 AND를 보여줍니다. 이는 두 개의 서로 다른 이진수의 경우 해당 비트가 AND 진리표를 기반으로 AND 처리됨을 의미합니다.

왼쪽에서 오른쪽으로 이동하면 1 AND 1 = 1입니다. 0과 1 = 0; 0과 0 = 0; 1과 0 = 0; AND 진리표에 따라 등등.

또는
다음 표에서는 비트별 OR을 보여줍니다. 이는 두 개의 서로 다른 이진수에 대해 해당 비트가 OR 진리표를 기반으로 OR된다는 것을 의미합니다.

왼쪽에서 오른쪽으로 이동하면 1 OR 1 = 1입니다. 0 또는 1 = 1; 0 또는 0 = 0; 1 또는 0 = 1; OR 진리표에 따라 등등.

무료
다음 표에서는 Bitwise 배타적 OR을 보여줍니다. 이는 두 개의 다른 이진수에 대해 해당 비트가 XOR 진리표를 기반으로 XOR된다는 것을 의미합니다.

왼쪽에서 오른쪽으로 이동하면 1 XOR 1 = 0; 0 XOR 1 = 1; 0 XOR 0 = 0; 1 XOR 0 = 1; XOR 진리표에 따라 등등.

반전 (아님)
다음 표에서는 비트별 NOT(반전)을 보여줍니다. 이는 하나의 이진수에 대해 이번에는 각 비트가 NOT 진리표를 기반으로 반전된다는 것을 의미합니다.

왼쪽에서 오른쪽으로 이동, NOT 1 = 0; 0 = 1이 아닙니다. 0이 아님 = 1; 1이 아님 = 0; NOT 진리표에 따라 등등.

오른쪽 또는 왼쪽으로 이동

오른쪽으로 이동
다음 이진수는 오른쪽으로 3비트 위치 이동하고 왼쪽의 비어 있는 비트 위치에 0이 삽입됩니다.

이동은 1개, 2개, 3개, 4개 등의 위치에 대해 수행될 수 있습니다.

왼쪽으로 이동
다음 이진수는 왼쪽으로 3비트 위치 이동하고 오른쪽의 비어 있는 비트 위치에 0이 삽입됩니다.

이동은 1개, 2개, 3개, 4개 등의 위치에 대해 수행될 수 있습니다.

오른쪽 또는 왼쪽으로 회전

회전은 이동과 유사합니다. 한 번에 하나씩 이루어집니다. 오른쪽으로 회전할 때 오른쪽 끝을 벗어나는 비트는 이동처럼 떨어지지 않습니다. 왼쪽의 비어 있는 비트를 하나씩 교체합니다. 왼쪽으로 회전할 때 왼쪽 끝을 벗어나는 비트는 이동처럼 떨어지지 않습니다. 오른쪽의 비어 있는 비트를 하나씩 교체합니다.

오른쪽으로 회전
다음 이진수는 오른쪽으로 3비트 위치 회전됩니다.

회전은 1개, 2개, 3개, 4개 등의 위치에서 수행할 수 있습니다.

왼쪽으로 회전
다음 이진수는 왼쪽으로 3비트 위치 회전됩니다.

회전은 1개, 2개, 3개, 4개 등의 위치에서 수행할 수 있습니다.

3.8 ASCII 문자 세트 및 해당 코드 값

ASCII는 '정보 교환을 위한 미국(미국) 표준 코드'를 의미합니다. 96개의 키가 있는 키보드를 상상해 보세요. 대문자 키와 소문자 키가 다른 이상적인 키보드입니다. 다른 모든 키는 영어(미국) 키보드에 있는 문자를 나타냅니다. 문자 및 코드(문자에 해당하는 번호)는 다음과 같습니다.

이 표에서는 처음 32자(00이 있는 문자 포함) 16 = 0 10 코드)는 인쇄되지 않는 문자입니다. 그들은 제어 문자입니다. 모든 것이 평등한 화면(모니터)에는 보이지 않습니다. 효과만 있을 뿐입니다. 이에 대해서는 나중에 더 자세히 논의해 보겠습니다.

나머지 문자는 인쇄 문자입니다. 그들은 화면에 보입니다. 128개의 ASCII 문자가 있습니다. 2 7 = 128. 1,111,111 2 = 127 10 . 7 in 2 7 7비트를 의미합니다.

지금, 1111111 2 + 1 2 와 같다:

여기서는 10,000,000 2 = 128 10 . 128개가 있다 10 이전 ASCII 문자 목록(표)에 있는 문자입니다. 여기에는 16진법(16진수)의 코드가 00인 널 문자가 포함되며, 이는 10진법의 0에 해당합니다.

총 128개의 문자가 있으므로 128에서 인쇄할 수 없는 문자 32개를 빼면 96개의 인쇄 문자가 됩니다. 이 절에서는 인쇄 가능한 문자인 96자를 가진 이상적인 키보드가 있다고 가정합니다. 이 이상적인 키보드에서는 영어 대문자 키가 영어 소문자 키와 다릅니다.

키보드의 각 문자는 목록에 표시되지 않은 7비트의 기본 2개 숫자로 표시됩니다. 예를 들어, 대문자 'N'은 2진수의 7비트 1001110으로 표시됩니다. 1001110을 변환하려면 2 16진수 앞에 0을 붙이고 다음과 같이 결과를 4비트 하위 그룹으로 그룹화합니다.

| 0100 | 1110 | 2 = | 4 | 전자 | 16

01001110 입니다 2 = 4E 16 . 4E를 변환하려면 16 10진수로 다음을 수행합니다.

4×(16) 1 +E×(16) 0 = 4 x 16 + E x 1 = 4 x 16 + 14 x 1 = 64 + 14 = 78 10

목록(표)의 'N' 오른쪽에는 16진수 4E, 10진수 78이 표시되어 있습니다.

또 다른 예로, '[' 문자는 기본 2의 7비트 1011011로 표시됩니다. 변환하려면 1011011 2 16진수 앞에 0을 붙이고 다음과 같이 결과를 4비트 하위 그룹으로 그룹화합니다.

| 0101 | 1011 | 2 = | 5 | 비 | 16

01011011 입니다 2 = 5B 16 . 5B16을 10진수로 변환하려면 다음을 수행하세요.

5×(16) 1 +B×(16) 0 = 5 x 16 + B x 1 = 5 x 16 + 11 x 1 = 80 + 11 = 91 10

목록(표)의 “[” 오른쪽에는 16진수 5B, 10진수 91이 표시되어 있습니다.

또 다른 예로서, 십진수 '5'에 대한 문자는 2진수의 7비트 0110101로 표시됩니다. ~ 아니다 2진수의 0000101. 0110101을 변환하려면 2 16진수로 앞에 0을 붙이고 결과를 다음과 같이 4비트 하위 그룹으로 그룹화합니다.

| 0011 | 0101 | 2 = | 5 | 비 | 16

00110101 입니다 2 = 35 16 . 3516을 10진수로 변환하려면 다음을 수행합니다.

3x(16) 1 + 5×(16) 0 = 3 x 16 + 5 x 1 = 3 x 16 + 5 x 1 = 48 + 5 = 53 10

목록(표)의 “5” 오른쪽에는 16진수 35, 10진수 53이 표시되어 있습니다.

컴퓨터는 바이트 단위로 작동하므로 이상적인 키보드의 키를 누르면 8비트가 마이크로프로세서(마더보드)로 전송됩니다. 이상적인 키보드는 컴퓨터의 시스템(기본) 장치와 분리된 주변 장치입니다. 여기에는 7비트를 생성하고 그 앞에 0을 붙인 후 케이블을 통해 시스템 장치의 마더보드로 보내는 전자 회로(IC)가 있습니다. 마더보드의 입력 포트(입력 회로)에서 마더보드에도 있는 마이크로프로세서로 연결됩니다. 마이크로프로세서에서 마더보드에도 장착된 메모리로 이동합니다.

따라서 이상적인 키보드의 'N' 키를 누르면 8비트 01001110이 마이크로프로세서로 전달됩니다. 마이크로프로세서에서 메모리로 이동하여 메모리 위치에 바이트로 남아 있습니다. 컴퓨터 프로그래머는 01001110의 8비트를 명심해야 합니다. 2 4E와 똑같다 16 78이랑 똑같네 10 .

이상적인 키보드의 '[' 키를 누르면 8비트 01011011이 마이크로프로세서로 전달됩니다. 마이크로프로세서에서 메모리로 이동하여 메모리 위치에 바이트로 남아 있습니다. 컴퓨터 프로그래머는 01011011의 8비트를 명심해야 합니다. 2 5B와 같습니다 16 91이랑 똑같네 10 .

이상적인 키보드의 '5' 키를 누르면 십진수가 아닌 문자로 8비트 00110101이 마이크로프로세서에 전달됩니다. 마이크로프로세서에서 메모리로 이동하여 메모리 위치에 바이트로 남아 있습니다. 컴퓨터 프로그래머는 00110101의 8비트를 명심해야 합니다. 2 35와 똑같다 16 5310과 동일합니다. 10 .

프로그램이 실행되면서 컴퓨터에 십진수 5가 입력되기를 기다리는 경우가 있습니다. 이 상황에서 이상적인 키보드의 '5' 키를 누르면 여전히 00110101이라는 8비트 코드가 마이크로프로세서로 전송됩니다. 필요한 것은 '5' 문자가 아닌 십진수 5이므로 메모리의 코드 조각(짧은 프로그램)은 마이크로프로세서를 사용하여 2진법의 문자 코드 00110101을 2의 보수 수 00000101로 변환합니다. 2 2의 보수 바이트로 메모리 위치에 보내기 전에. 컴퓨터 프로그래머는 00000101이 5를 의미한다는 것을 명심해야 합니다. 10 2진수이며, 코드번호 00110101과 다릅니다. 2 , 35 16 , 그리고 53 10 이는 '5'라는 문자를 의미합니다. 2의 보수인 00000101을 메모리에 표시하려면 또 다른 짧은 프로그램에서 메모리의 00000101을 00110101로 변환해야 합니다. 이는 35와 동일한 00110101입니다. 16 53과 똑같습니다 10 모니터에 표시되는(또는 프린터로 종이에 인쇄되는) 정보입니다.

3.9 부동 소수점 숫자 형식

소수 부분이 없는 숫자는 정수입니다. 숫자 36은 정수입니다. 36.375는 정수가 아닙니다. 소수 부분이 있는 십진수입니다. .375의 소수 부분은 1보다 작은 분수입니다.

36.375는 십진수 형식으로 다음과 같이 해석됩니다.

지금:

그래서 100100 2 = 36.375의 정수부분인 3610 10 .

지금:

따라서 0.011 2 = 0.375 10 이는 36.375의 십진수 부분입니다. 10 .

∴ 36,375 10 = 100100.011 2

다른 말로 하면:

100100.011 2 = 36,375 10

숫자는 컴퓨터에서 10진법이 아닌 2진법으로 표현되며 모든 것이 동일합니다. 마이크로프로세서의 레지스터에 있는 셀이나 메모리에 있는 셀은 1이나 0만 가질 수 있기 때문에 소수점을 저장할 공간이 없습니다. 이는 문제를 야기합니다. 해상도로는 IEEE-754 단정밀도 32비트 부동 소수점 표현과 IEEE-754 배정밀도 64비트 부동 소수점 표현이 있습니다.

32비트 부동 소수점 숫자 형식
숫자 100100.0112는 다음과 같이 표현될 수 있습니다.

100100.011 2 = 1.00100011 2 x 2 +5

= 기호의 오른쪽은 수학에서 100100.011의 왼쪽의 두 가지 기본 표준 형식으로 참조됩니다. 2 .

이제 1.00100011 중 00100011 2 앞에 '1' 없이 = 기호 오른쪽에 표시됩니다. 밑이 2가 아닌 것을 명시적 유효수라고 합니다. 이 경우 이진점은 '1'을 갖기 위해 왼쪽으로 다섯 자리를 차지합니다. 소수점과 이진수를 혼동하지 마십시오. 2진수는 2진법이고 소수점은 10진수입니다. '1'입니다. = 기호 오른쪽에 00100011이 붙고 밑이 2가 아닌 경우가 진정한 유효 숫자를 형성합니다. 그러나 1.00100011을 암시적 유효수라고 합니다.

오른쪽의 유효숫자 뒤에는 'x 2'가 있습니다. +5 ' 표현. 이 표현에서 +5를 지수라고 합니다. 더하기 기호는 이진 점이 정상적인 원래 위치에 있기 위해 다섯 자리 앞으로 이동해야 함을 의미하며 2는 번호 매기기의 기준입니다. 이전 방정식은 다음과 같이 역으로 작성할 수 있습니다.

1.00100011 2 x 2 +5 = 100100.011 2

32비트 부동 소수점 표현에서는 '1.00100011'입니다. 2 x 2 +5 '는 '100100.011'이 아닌 '100100.011'을 사용하는 것입니다. 2 '. 베이스의 2는 기록되지 않습니다. '1.00100011'에 대한 32비트 부동 소수점 표현 2 x 2 +5 ” 숫자는 36.375와 같습니다. 10 = 100100.011 2 , 다음 표에 나와 있습니다.

0부터 시작하여 오른쪽 끝부터 번호가 매겨진 32비트 위치가 있습니다. 왼쪽 끝의 첫 번째 비트는 부호 비트입니다. 숫자가 양수이면 이 비트는 0입니다. 숫자가 음수이면 이 비트는 1입니다(-1은 두 문자로 구성되며 하나의 셀에 들어갈 수 없습니다). 1.00100011 2 x 2 +5 이는 36.375와 같습니다. 10 이는 100100.011과도 같습니다. 2 양수입니다. 따라서 첫 번째 비트는 0입니다.

지수에는 위치 30부터 위치 23까지 8개의 비트 위치가 있습니다. 그런데 거기에 적힌 지수는 10000100이다. 2 이는 132와 같습니다. 10 . 관심 있는 수의 지수는 실제로 2의 밑수에 +5입니다. 그러면 어떻게 되나요?

이제 32비트 형식에서는 0의 지수가 01111111로 작성됩니다. 2 이는 127과 같습니다. 10 . +5 10 +101이다 2 . 그래서 10000100에 도착하면 2 표의 지수 부분에서 101 2 01111111에 추가되었습니다 2 , 이에 따라. 127에 5를 더하면 132가 된다는 뜻이다. 10 .

'1.'이 없는 유효수는 22위에서 15위까지 내려갔습니다. '1'의 1을 주목하세요. 32비트 문자열에는 표시되지 않았습니다. 결코 표시되지 않습니다. 이를 수락하십시오. 0 위치까지의 나머지 셀은 0으로 채워집니다.

실제 지수가 -5이면 127에서 5를 뺍니다. 10 122개를 갖다 10 . 이는 101을 빼는 것과 같습니다. 2 01111111부터 2 01111010을 가지다 2 .

이전의 모든 그림에서 숫자 +1은 1.0 x 2와 같습니다. 0 = 1.0 x 1 = 1.0은 다음과 같이 표현됩니다.

'1'에 주목하세요. 1.0x2 0 형식으로 표시되지 않습니다. 결코 표시되지 않습니다. 1.0 이후에 양수로 나타나는 다음 대분수는 다음과 같습니다.

오른쪽 끝에 있는 1을 주목하세요. 이 표현은 숫자입니다:

1.0000001192092896과 1.0의 차이점은 다음과 같습니다.

1.0000001192092896 – 1.0 = 0.0000001192092896

소수 부분이 있는 숫자는 대분수입니다. 1 사이의 모든 분수가 아닙니다. 10 그리고 2 10 컴퓨터로 표현할 수 있습니다. 32비트 부동 소수점 형식을 사용하는 연속된 혼합 숫자 사이의 가장 작은 분수 간격은 0.0000001192092896이라고 가정할 수 있습니다. 배정밀도의 간격은 더 작을 것으로 예상됩니다. 다음 그림을 참조하세요.

숫자를 나타내는 0.0은 이전 인수를 따르지 않습니다. 0.0에 대한 표현이 선언되었으며 그렇게 학습되어야 합니다. 0.0을 나타내려면 유효숫자의 모든 셀이 0이고 지수의 셀도 모두 0입니다. 부호 비트는 0 또는 1일 수 있습니다. 불행하게도 이는 다음과 같이 양수 0과 음수 0을 발생시킵니다.

실제 생활에는 0이 하나만 있습니다. 양의 0과 음의 0은 존재하지 않습니다. 그러나 일반적으로 0은 양수로 간주됩니다. 이 특정 형식 설명 때문에 여기에는 양수 0과 음수 0이 존재합니다. 수직선(위 참조)에는 +0과 -0도 있을 수 있지만 0은 하나만 존재합니다.

64비트 부동 소수점 숫자 형식
64비트 부동 소수점 형식은 32비트 형식과 유사하지만 다음과 같은 차이점이 있습니다.

  • 숫자를 표현하는 데에는 64비트가 있습니다.
  • 부호 비트 다음에는 지수를 나타내는 11비트가 있습니다.
  • 0 인덱스의 지수 숫자(2 0 )은 1023입니다 10 = 01111111111 2 .
  • 11비트 뒤에는 명시적 유효 숫자를 위한 52비트가 옵니다.
  • 32비트 형식보다 숫자의 범위가 더 넓습니다.

'1'에 주목하세요. 즉, 유효숫자의 시작 부분은 32비트 형식의 32비트에 포함되지 않는 것처럼 여전히 64비트에 포함되지 않습니다.

64비트 형식과 32비트 형식의 가장 중요한 차이점 중 하나는 64비트 형식의 연속 대분수 간의 차이가 32비트 형식의 차이보다 작다는 것입니다.

64비트 형식에서 1.0과 다음 대분수 사이의 간격(갭)은 다음과 같이 계산할 수 있습니다.

1.0은

0 01111111111 00000000000000000000 00000000000 000000000000000000000 2

이는 문자열에 표시되지 않은 '1.'에 2의 0승(지수)을 곱한 것과 같습니다(지수는 1023입니다). 10 = 01111111111 2 2인용 0 = 1). 문자열은 1.0 x 2입니다. 0 .

1.0보다 큰 다음 대분수는 다음과 같습니다.

0 01111111111 00000000000000000000 00000000000 000000000000000000001 2

이는 '1'과 같습니다. 이는 문자열에 표시되지 않으며 그 뒤에 51개의 0이 오고 그 다음에는 1에 2의 0승(지수는 1023)을 곱합니다. 10 = 011111111112 2 2인용 0 = 1). 이는 다음과 같습니다.

+2 0 × (1 + 2− -52 ) ≒ 1.0000000000000002

≒는 대략 같다는 뜻입니다.

지금:

1.0000000000000002 – 1.0 ≒ 0.0000000000000002

32비트 형식에 해당하는 간격 값은 0.0000001192092896 ≒ 0.00000012입니다.

0.0000000000000002는 0.00000012보다 훨씬 작습니다. 따라서 32비트 형식의 두 연속 정수 사이에 있는 것보다 64비트 형식의 두 연속 정수(예: 3과 4) 사이에 대분수가 훨씬 더 많습니다.

수직선에서 연속된 두 정수 사이의 대분수 수는 무한합니다. 따라서 어떤 형식(예: 32비트 또는 64비트)도 연속된 두 정수(정수) 사이의 모든 대분수를 제공할 수 없습니다. 형식(예: 32비트 또는 64비트)에서 제공되는 두 개의 연속 정수 사이의 간격(간격)이 작을수록 연속 정수 사이의 대분수(연직선의 경우) 수가 더 많아집니다.

64비트 형식이 32비트 형식에 비해 배정밀도 이상으로 설명되는 이유는 64비트 형식의 경우 두 개의 연속된 정수로 둘러싸인 두 개의 연속된 대분수 사이의 간격이 해당 32보다 작기 때문입니다. -비트 형식 간격. 또한 64비트 형식의 경우 두 경계 정수 사이에 가능한 대분수가 32비트 형식보다 더 많습니다.

소수의 소수 부분(분수)을 2진수 부분으로 변환
36.375는 소수 부분이 '.375'인 십진수입니다. '.375'의 소수 부분은 0과 1 사이의 분수입니다. 10진수의 0.5는 2진수의 1/2과 값이 같습니다. 0.5 10 기본 2 확장으로 표현되는 것은 다음과 같습니다.

0.101이 아니다 2 이는 0.625를 의미합니다. 10 . 십진수의 소수 부분에는 해당 이진수에 해당하는 이진 부분이 있습니다. 따라서 36.375와 같은 십진수를 변환하려면 10 2진수로 변환하려면 36을 이진수로 변환한 다음 .375도 이진수로 변환하세요. 그런 다음 두 결과를 이진점으로 결합합니다. 두 섹션을 변환하는 방법은 다릅니다. 10진수를 2진수로 변환하는 방법은 1장에서 설명합니다.

소수를 이진 분수로 변환하려면 다음 단계를 따르세요.

  • 소수 부분(소수 부분)에 2를 곱합니다. 그 결과로 나오는 정수가 첫 번째 이진수입니다.
  • 다음 이진수를 얻으려면 분수 소수점 결과로 이전 단계를 반복하십시오.
  • 소수점 이하 자릿수 결과가 .0000—이 될 때까지 이전 단계를 계속 반복합니다.

예: 36.375의 분수 부분 변환 10 2진수의 동등한 분수 부분으로.

해결책:

세 번째 단계에서는 .500에 1.500이 아닌 2가 곱해졌습니다. 이진 해당 분수는 맨 위에서 마지막 열에서 읽혀집니다. 결과는 다음과 같습니다.

.375 10 = .011 2

2진수의 2진수 부분(분수)을 10진수 부분으로 변환
이를 달성하려면 이진 분수를 2의 역수로 확장하세요.

예: 100100.011의 분수 부분 변환 2 10진법의 동등한 분수 부분으로.

해결책:

3.10 컴퓨팅에서의 숫자 접두사

일상생활에서 1킬로는 1000을 의미하며, 1kg과 마찬가지로 k(소문자)로 축약됩니다. 컴퓨팅에서 1킬로는 2를 의미합니다. 10 = 1024이지만 1Kbits와 같이 K(대문자)로 축약됩니다. 일상생활에서 1메가는 1,000,000을 의미하며 1Mg처럼 M(대문자)로 축약됩니다. 컴퓨팅에서 1메가는 2를 의미합니다. 이십 = 1,048,576 = 2 10 x 2 10 = 1024 x 1024 = 1,048,576이며 여전히 1Mbits와 같이 M(대문자)로 축약됩니다. 정상적인 생활에서 1기가는 1,000,000,000을 의미하며 1Gg와 마찬가지로 G(대문자)로 축약됩니다. 컴퓨팅에서 1기가는 2를 의미합니다. 30 = 1,073,741,824 = 2 10 x 2 10 x 2 10 = 1024 x 1024 x 1024 = 1,073,741,824이며 여전히 1Gbits와 같이 G(대문자)로 축약됩니다. 다음 표는 일상 생활과 컴퓨팅에서 접두사의 네 가지 의미를 보여줍니다.

3.11 문제점

독자는 다음 장으로 넘어가기 전에 한 장의 모든 문제를 해결하는 것이 좋습니다.

  1. -10부터 +10까지의 정수로 수직선을 그립니다.
  2. 8비트 2의 보수로 다음 이진수를 추가합니다: 101010 2 그리고 1111 2 .
  3. 8비트에서 2의 보수 접근법만 사용하여 이진수 1111을 뺍니다. 2 이진수 101010에서 2 .
  4. 10110의 제품을 찾아보세요 2 x 1101 2 기본 2에서.
  5. 36,375를 나누다 10 1000까지 10 10진수와 2진수로 결과를 비교해 보세요.
  6. 선택한 8비트를 사용하여 논리 AND, OR, XOR, 반전, 오른쪽으로 이동, 왼쪽으로 이동, 오른쪽으로 회전 및 왼쪽으로 회전을 설명합니다. 각 바이트에는 1과 0이 혼합되어 있어야 합니다.
  7. a) ASCII 문자 0에 대한 숫자 코드를 16진수, 2진수, 10진수로 작성하세요.
    b) ASCII 문자 “1”에 대한 숫자코드를 16진수, 2진수, 10진수로 작성하시오.
    c) “A”의 ASCII 문자에 대한 숫자코드를 16진수, 2진수, 10진수로 작성하시오.
    d) “a”의 ASCII 문자에 대한 숫자코드를 16진수, 2진수, 10진수로 작성하시오.
  8. 변환 49.49 10 기본 2로. 결과를 IEEE 32비트 부동 소수점 형식으로 변환합니다.
  9. a) IEEE 64비트 부동 소수점 형식은 32비트 형식과 어떻게 다릅니까?
    b) 64비트 형식이 64비트 형식에 비해 배정밀도 또는 더 높은 정밀도로 설명되는 두 가지 관련 이유를 제시하십시오.
    32비트 형식.