■ 10진수
- 10진수 시스템에서 0~9까지의 10개의 숫자로 표현 (1자리를 기준)
- 10n(n=±정수)
■ 기수는 10 : 가중치를 보면 알 수 있다.
10^0승은 1이기 때문에 1자리이다.
10^1승은 10이기에 2자리이다
10^2승은 100이기 때문에 3자리이다.
10^-1승은 0.1 이다. 즉 소수
10^-2승은 0.01이다. 이것도 소수
■ 각 자릿수를 갖는 값의 합 = 가중치 구조로 표현해라 라는 뜻.
■ 2진수
- 2진수 시스템에서 0과1의 2개의 숫자로 표현
-디지털시스템에서는 2진수 사용
- 2n(n=±정수)
■ 덧붙임
2^-1승은 1/2이다.
2^-2승은 1/4이다. 계속해서 증가하는 n은 1/8, 1/16, 1/32, 1/64, 1/128로 늘어난다.
■ 10110.11011 (2진수)를 10진수로 바꾸어라 (위의 10110.11011 항)
10110.11011 에서 각자리 0 은 사라진다. 0을 곱하면 0이니까.
여기서 정수와 소수를 분리해보자 10110 과 11011로 나눈다!
10110 = 16 + 4+ 2가 된다. 그래서 22
소수 뒷자리 .11011 은 0.25 + 0.0625 + 0.03125 이다. 더하면 0.84375이다.
■ 4비트의 경우 2^4 = 16이다. -1 하면 15
■ 8비트의 경우 2^8 = 256이다. -1 하면 255
■ 왜 -1을 하는가? 컴퓨터의 숫자는 1이 아닌 0부터 시작하기 떄문이다. 즉 0~15 = 총16개이다. 마찬가지로 0~255 는 총갯수가 256개가 맞다. 다만 우리가 생각하는 가장 큰수는 거기서 항상 -1인 숫자가 되기 때문에 -1을 하는 것이다.
■ 참고자료
-2,8,10,16진수가 뭐인가?
- 위 표의 10진수 항목을 기준으로 보자. 아래에 설명함
0-1은 2개의 숫자다. 이 2개로만 표현한 걸 2진수라고 한다.
0-7까지 총 8개로 표현하는 것을 8진수라고 한다. 비트로 표현하자면 000~111까지이다. 그래서 총 3개의 비트만 쓴다.
0-9까지 총 10개로 표현하는 것을 10진수라고 한다.
0-15까지 총 16개로 표현하면 16진수라고 하는 것이다. 비트로 표현하면 0000~1111까지이다. 그래서 총 4개의 비트를 쓴다.
■ 위의 그림은 계수기 (카운터)이다.
■ 카운터 갯수 어떻게 읽나?
1개면 01 이다.
2개면 10
3개면 11
4개는 100
5개는 101
6개는 110
7개는 111
8개는 1000
9개는 1001 이다. 여기서 앞 1은 MSB / 뒷자리 1은 LSB 이다.
■ 누승= 제곱승
■ 12가 어떻게 1100 이 되는가?
2^4 | 2^3 | 2^2 | 2^1 | 2^0 | |
10진수로 표현 | 16 | 8 | 4 | 2 | 1 |
필요한가? | x | 필요 | 필요 | x | x |
필요하니까 불들어와! | 0 | 1 | 1 | 0 | 0 |
일단 2진수 숫자들 중에서 12를 만들 수 있는 조합이 뭔가?
8과 4를 더하면 12이네?
즉 2^3승과 2^2승을 더하면 8+4니까 12이다.
즉, 우리가 쓸 2^3승과 2^2승에만 불이 들어온다. 1을 On이라고 생각해보자. 불들어와!
그러면 01100이다. 앞에 0은 필요없으니 1100 이다.
■ 25는 어떻게 11001이 되는가?
2^4 | 2^3 | 2^2 | 2^1 | 2^0 | |
10진수로 표현 | 16 | 8 | 4 | 2 | 1 |
필요한가? | 필요 | 필요 | x | x | 필요 |
필요하니까 불들어와! | 1 | 1 | 0 | 0 | 1 |
16+ 8+ 1은 25이다.
필요한 것들 불 들어와!
11001 이 된다.
■ 58은 어떻게 111010이 되는가?
2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 | |
10진수로 표현 | 32 | 16 | 8 | 4 | 2 | 1 |
필요한가? | 필요 | 필요 | 필요 | x | 필요 | x |
필요하니까 불들어와! | 1 | 1 | 1 | 0 | 1 | 0 |
■ 고전적으로 나눠서 해보자
이렇게 나눈다. 그리고 마지막 몫과 나머지들을 보면 10011 이 된다. 이게 그 값이다.
■ 위에서 배운 방식
2^4 | 2^3 | 2^2 | 2^1 | 2^0 | |
10진수로 표현 | 16 | 8 | 4 | 2 | 1 |
필요한가? | 필요 | x | x | 필요 | 필요 |
필요하니까 불들어와! | 1 | 0 | 0 | 1 | 1 |
16 + 2+1 = 19니까. 10011이 된다.
이 방법을 좀 더 권장한다고 함.
■ 2가지 방법이 있다.
- 위에서 배운 가중치의 합 방법
- 계속 2를 곱하는 방법
■ 계속 2를 곱하는 방법
- 앞의 진한 검은색 0 의 자리를 그대로 빨간색 0이 되어 옮긴다.
- 만약 나온 빨간 수가 1이라면? 그다음 줄에서 1을 빼야한다.
- 예를 들면 0.625에서 2를 곱하면 1.25가 나온다. 그리고 우린 빨간색 1에서 1로 표기한다. 그러면서 다음에 곱할 숫자에 1을 빼는 것이다. 그렇게 빼면? 1.25x2가 아닌, 0.25가 되는 것이다.
- 언제까지하는가? 마지막 소숫점 수가 0이 될때까지. 즉 0.x 에서 x가 0이 될때까지한다.
.
시작 수 | 곱하기 2 | 결과는? | 앞자리 수가 뭔가? | 저장할 값 (2진수 표시때 쓸 값) |
특이사항 | |
1단계 | 0.3125 | 2 | 0.625 | 0.xxx | 0 (앞자리를 그대로) | 결과값 0.625 그대로 써 |
2단계 | 0.625 | 2 | 1.25 | 1.xx | 1 | 앞이 1이야! 1을 빼! |
3단계 | 0.25 (결과가 1.25인데 왜 0.25인가? 1로 해당 값을 나타내기 위해 뺀 것이라 생각하자!) |
2 | 0.5 | 0.x | 0 | 결과값 0.5 그대로 써 |
4단계 | 0.5 | 2 | 1.0 | 1.0 | 1 | 일단 앞자리가 1이니까 1을 빼! 소수 뒷자리 0.x에서 x가 0이네? 끝내! |
■ 계속 2를 곱하는 방법 (정리해본 내용)
- 아래의 표는 내가 정리한 것이다.
- 의식의 흐름처럼, 좌 > 우 에서 시작해서 아래로 내려가면서 흐름을 보면 된다
- 저장할 값에서 0101 순서대로해서 [ .0101 ] 이라고 보면 된다.
■ 보수의 개념 :
- 컴퓨터는 덧셈을 좋아한다. 반대로 뺄셈, 곱셈, 나눗셈을 싫어한다. 그래서 이러한 3가지 싫어하는 산술을 덧셈으로 만든 것이 보수의 개념이라 생각해보자.
- 보수라는 것은 음수의 개념을 양수로 바꾸는 것이다.
■ 캐리 : 2진수에서는 1+1은 2가 아니다. 1+1은 0이 되고 한자릿수가 올라간다. 그래서 10이다.
■ 2번째 줄을 잘 보자
0에서 1을 뺄 수 없으니 앞의 빨간색 1의 자리를 빌린다.
10-1 에서 10은 2라고 생각하면 된다. 0은 0 / 1은 1 / 10은 2이다. (2진수표를 보면 된다.)
그래서 1이 된다. 그런데 우리가 앞서 빌린 1이 있다. 빨간색 1. 그걸 빌린 티를 내야한다.
그래서 11이 되는 것이다.
■ 예제 c문제
일의 자리 : 0-1은 안된다. 그래서 앞 십의자리(편의상 110의 빨간색을 십의 자리라고 함)에서 빌려온다. 10-1 = 1이다
십의 자리 : 앞서 1을 빌려왔다. 그래서 0이다. 이것도 앞의 백의 자리에서 1을 빌려온다. 그러면 10-1이므로 1이다.
백의 자리 : 앞서 십의 자리에서 1을 가져왔다. 그래서 0이다. 0-0은 0이다.
결론 : 011 이므로 11이다.
■ 예제 a
1 | 1 | 11x1 | 아래 11 중에 일의 자리 1 | ||
+ | 1 | 1 | 0 | 11x10 | 아래 11중에 십의 자리 10 |
---- | ---- | ----- | ----- | ||
1 | 0 | 0 | 1 |
■예제 b
1 | 1 | 1 | 111x1 | 111이다. | |||
111x0 | 0 이다. | ||||||
+ | 1 | 1 | 1 | 0 | 0 | 111x100 | 11100 |
------- | ------ | ------ | ------ | ------ | ------ | ||
1 | 0 | 0 | 0 | 1 | 1 |
■ 결론
2번째 줄을 각각 나눠서 1번째 수와 처리한다. 그리고 합산한다.
다만 합산시에는 반드시 2진수로 처리하는 것을 잊지말자. 1+1 =은 10이다.
■ 그냥 나눗셈 그대로 하면 된다.
■ 맨 위가 결과값이다.
■ 보수의 개념. 매우 중요! 반드시 숙지해둘 것.
■ 2진수의 보수는 2가지가 있다.
■1의 보수
1은 0 , 0은 1로 바꾸기만 하면 된다.
위의 세모 모양은 Not게이트이다.
■ 1의 보수 특징
1의 보수는 모두 더하면 1이다. 무슨 뜻인가? 아래 표를 보면 된다.
기본값 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | |
1의 보수 변환 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | |
+ | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | |
다 더하니 1이네? | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
■ 2의 보수
기본값 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | |
1의 보수 치환 (1`s complement) |
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | |
1을 더한다! | + | 1 | |||||||
------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ||
결과값 (2`s complement) |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
1`s complement 는 1의 보수로 치환함
2`s complement 는 치환한 값에 1을 더한 값
이것이 2의 보수이다.
■ 2의 보수 특징
기본값 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | |
2의 보수 결과값 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | |
+ | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2의 보수는 기본값에 결과값을 더하면 1의 보수와 다르게 0000000 이 된다.
즉, 1의 보수는 기본값에 1의보수 결과값을 더하면 1이 되지만, 2의 보수는 0 이 된다.
■ 2의 보수 구하는 다른 방법 (훨씬 쉽다!)
왼쪽으로 가면서 나타나는 첫 1까지는 그대로 쓴다. 즉 위의 예제에서 빨간색 부분이다.
그리고 나머지 부분은 반대로 바꾼다. 노란색 부분이다.
■ 예제 그림
1의 보수 부분은 그대로 이다.
캐리 입력 부분에서 1을 더한다. 우리가 아는 2의 보수 구할 때 쓰는 +1이다.
■ 16진수
-기수는16
-16개( 0~9,A~F )의 문자로 구성
- 2진수와 상호 변환이 쉬움
-왜 2진수와 상호 변환이 쉬울까? 2진수가 4비트를 최대로 쓸 때 0000~1111이다. 그리고 16진수에서 쓰는 최대가 4비트이기 때문. 그래서 4비트씩 딱 맞아떨이지기 때문에 상호변환이 좋은 것이다.
■ 2진수를 16진수로 변환해라
4비트씩 끊으면 된다. 그리고 그 끊은 것을 각각 변환하면 된다.
왜냐하면 2진수로 16진수를 만들려면 4비트가 필요하니까.
■ 예제 b
앞에 2자리밖에 안남을 때는 00이 생략되어 있다고 생각하면 된다. 즉 0011 = 11 이다. 그래서 3이다.
■ 16진수를 2진수로 바꿀때
16진수 각 숫자를 4비트씩 표현하면 된다. (반대)
■ 16진수를 10진수로
■예제 윗부분 (이 방법을 추천한다. 단계는 한번더 거치지만, 헷갈리지 않는다.)
예제 a) 1C 문제를 예를 들어 보자.
- 먼저 16진수를 2진수로 바꾼다.
- 1C는 0001 1100 이 된다.
- 그다음 각 자릿수를 더하면 된다. 무슨 말인가?
- 여기서 1로 되어 있는 부분이 몇승인지 보자.
0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
2^8 | 2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^1 | 2^0 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
쓴다 | 쓴다 | 쓴다 |
즉 위에 1이 들어온 부분은 16, 8, 4이다. 이걸 더해주면 된다.
16+8+4는 28이다.
■예제 아랫부분
E5는 2자리이다. 즉 16^0 와 16^1 으로 나눠 계산하면 된다.
B2F8의 계산에서 4096은 16^3이다. 256은 16^2, 16은 16^1
■10진수 16진수 (16으로 반복적으로 나눈다.)
- 빨간 40은 다음에 나눌 때 쓴다. 나머지 0.625에 16을 곱한다. 10이 나온다. 이 16진수에 10은 A와 같다. (10이 왜 A인지 모르겠으면 16진수와 10진수 비교표를 보면 된다.)
- 빨간 2는 다음에 나눌 때 쓴다. 나머지 0.5에 16을 곱한다. 8은 그대로 8
- 여기서 앞 수가 0.xxx가 된다. 0이 되므로 그만 나눈다. 그리고 0.125에 16을 곱한다. 결과값 2는 그대로 2이다.
결과값 28A가 나온다.
■ a,b,c 예제에서는 그냥 더하면 된다.
■ d번을 유의깊게 보자. (합이 16진수 최대를 넘어가는 경우임. 10진수로 예를 들면 9+9 이런식의 올림이 나온 경우이다.)
- F와 C를 더하면 16진수 최대 숫자 크기가 넘어간다. (F가 최대표현숫자임)
- 즉, 15+12가 된다. 그리고 결과값은 27이다. 27은 16진수로 표현이 안된다.
- 그래서 27-16을 해준다. 그러면 나머지 몫 11이 남는다. 11은 B이다. (16진수에서)
- D+A를 한다. 마찬가지로 13+10은 16진수 최대를 넘어감. 거기에 위에서 올림 수 +1이 있기에 총 24임
- 24에서 16을 뺀다. 그러면 8이다. 8은 8 그대로 쓸 수 있다.
- 위에서 1자리를 올렸기에 올림수 1이 붙는다.
-결과적으로 18B가 된다.
■ 16진수 뺄셈
■ 2a 예제
- 먼저 빼야할 수 2A를 2의 보수로 계산해야한다. 그렇기 위해서 2진수로 일단 표현하자.
- 00101010이다. 여기서 오른쪽 기준 첫 1까지는 놔둔다. (빨간 부분)
- 위의 나머지 밑줄친 부분은 반대로 바꾼다.
- 결과값은 11010110 이다. 이를 다시 16진수로 바꾸면 D6이다.
-이제 2의 보수로 바꾸었으니 그대로 더하면 된다. (왜 위에서 2의 보수로 바꾸었나? 컴퓨터는 덧셈을 좋아하지 뺄셈을 싫어한다. 즉, 2의 보수로 바꾼이유는 84-2A라는 연산이 너무 싫기에 덧셈형식으로 만들어주는 것이다. 즉 84+D6 이라는 덧셈형식으로 만들어서, 컴퓨터는 자기가 좋아하는 연산방식으로 바꿔서 하는 것이라 보면 된다.)
- 84+D6을 계산한다.
- 4과 6는 더하면 A
- 8과 D(13)을 더하면 21이다. 16진수에서 표현 못한다. 올림하자
-올림하는 방법: 21-16을 하면 된다. 나머지 값 5이다. 그리고 올림한 1이 남아있다.
- 그래서 15가 되는 것이다.
-결론 15A가 된다.
■ 8진수는 3개의 비트를 사용한다. 그래서 3비트로 쪼개주면 된다.
■ 예제 위
a)
- 13을 1과 3으로 쪼갠다
- 각각, 001 011으로 나타낼 수 있다. 끝이다.
■ 예제 아래
a) 답 65
- 110, 101로 나눠서 본다.
- 110은 6이다.
- 101은 5이다.
b) 571
c) 4632
d) 3204
■문제1
다음 중 8비트 2진수 00111100 (2진수)+11001100 (2진수)의 결과로 옳은 것은?
원래대로라면 264가 나온다. 그러나 이는 9비트까지 사용하게 되는 것이다.
즉 문제에서는 8비트까지 나와있다. 9비트는 캐리가 된 것으로 버려지게 된다.
앞 1은 버려지므로, 00001000은 8이다. 그래서 정답은 8이다.
■문제2
10진수 정수 부분을 2진수, 8진수, 16진수 등으로 변환할 때 2, 8, 16 등으로 나눠 몫과 나머지를 계산하고, 몫이 1이 될 때까지 계산한다. 는 맞는 말인가?
X 틀렸다. 왜냐하면 나눈 몫과 나머지로 계산하지만, 몫은 0이 될 때까지 계속하고 몫이 0이 되면 나머지를 계산된 순서와 반대로 하면 원하는 진수로 변환된다.
■ 학습정리
1. 10진수, 2진수, 8진수, 16진수
- 사람은 10진수를 사용하지만 컴퓨터 내부에서는 데이터를 쉽게 표현하기 위해 2진수를 사용
- 컴퓨터 내부에서는 2진수로 나타내지만 보기에 적합하지 않으므로 8진수나 16진수로 변환하여 나타냄
- 2진수를 8진수로 바꿀 때는 3자리씩 끊어서 변환하고, 16진수로 바꿀때는 4자리씩 끊어서 변환
2. 10진수 정수 부분을 2진수, 8진수, 16진수 등으로 변환
- 2,8,16등으로 나눠 몫과 나머지를 계산하며, 몫이 0이 될 때까지 계속
- 몫이 0이 되면 나머지를 계산된 순서와 반대로 적으면 원하는 진수로 변환
3. 10진수 소수 부분을 2진수, 8진수, 16진수 등으로 변환
- 2,8,6 등을 곱하여 소수 이하 자리가 0이 될 때까지 계속
- 소수 이하 자리가 무한히 반복되는 경우 적당한 선에서 계산을 그만두고, 곱셈 결과 정수가 되는 부분을 순서대로 원하는 진수로 변환
'컴퓨터공학 > 디지털공학개론' 카테고리의 다른 글
6. 오류 검출코드와 영문-숫자 코드 (0) | 2024.06.12 |
---|---|
5. 디지털 코드 (0) | 2024.06.12 |
4. 부호표시의 개념 (0) | 2024.06.12 |
2. 디지털 시스템과 컴퓨터의 구성 (0) | 2024.05.26 |
1. 디지털과 아날로그 (1) | 2024.05.20 |