2018. 4. 9. 16:20
용어개념정리
비트 = 0과 1을 담을 수 있는 공간
비트가 8개면 바이트
바이트 = 데이터가 처리되는 단위
비트 연산자
비트를 연산시켜주는 부호
& 비트 단위 and 연산 둘다 1이어야 1 아니면 0
| 비트 단위 or 연산 둘중하나만 1이어도 1
^ 비트 단위 xor 연산 두개가 같으면 0 다르면 1
~ 비트를 반전시킴(1의 보수)
시프트 연산자
>> 오른쪽으로 밀어
8 >> 1 1칸밀어
00001000 → 00000100
4
<< 왼쪽으로 밀어
4 << 2 2칸밀어
00000100 → 00010000
16
보수...
보수란 무엇인가??
보충해주는 수 라고도 하고 서로 상반되는 수라고도 한다.
무엇을 보충 하느냐??
예를들면 10진수 10 에대한 3의보수는 7이다.
기준 10을 만들기 위해 3에 7을 보충해주는 느낌이다.
그러니까 어떤 수를 만들기 위해서 보충을 해줘서 그걸 만들어낸다고 보면된다.
그리고 상반되는 수..
즉, 각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수라고도 하는데
이것이 뭔말이냐면.... 위에서 보충을 해서 만들어낸다고 했다.
1부터 100까지의 숫자가 있다고 하고
57 이라는 십진수가 있다고 가정을 해보자
각 자리는 5 7 로 이루어져 있다.
숫자 57 의 9의 보수는
57 을 99로 만드는수가 보수이다. 57에 보충을 해줘서 99를 만들어주는수가 보수
즉 각 숫자 자리 5 7 을 9로 만들어 주는수가 9의 보수인 것이다.
간단히 99 에서 57을 빼면 보수가 나온다
99 - 57 = 42
(만약 숫자의범위가 넓어서 자릿수를 4자리로 정한다면 9942)
10의 보수는 9의보수에 1을 더해주면 된다.
10의보수는 43
그렇다면 10진수에서 뺄셈을 할 때 보수를 어떻게 활용할까?
★9의 보수로 계산
96 - 57 이라는 식이 있을 때 빼는수의 9의 보수를 구해 더한후
자리올림이 된값을 1의 자리에 더한다
57의 9의 보수 42를 더하면 138이고 자리올림이 된값을 1의 자리에 더하면 39
★10의 보수로 계산
빼는수의 10의보수(9의보수+1)를 구해 더한후 올림이 된값을 버린다.
10의 보수 43을 더하면 139 이고 자리올림이 된값을 버리면 39
식으로 표현 하면 이런느낌??
96 - 57
= 96 -57 +100 -100
= 96 -57 + 99 + 1 - 100
= 96 +(99 -57) +1 -100 ← 57의 9의보수를 더해주는셈
= (96 + 42) +1 - 100
= 138 +1 -100
= 39
보수로 계산을 해서 자리의 올림이 없으면 음수가 나온것이다.
반대로 57 - 96을 한다면 9의 보수로 계산을 한 후 올림이 없으면 다시 9의보수로
57 + 3 = 60
60의 9의 보수 39, 즉 -39
10의 보수로 계산을 한 후 올림이없으면 다시 10의 보수로
57 + 4 = 61
61의 10의 보수 39, 즉 -39
십진수의 보수를 알아보았고 이제
이진수의 보수를 알아보자
일단 진법은 여러개가 있다
2진법 8진법 10진법 16진법 등등.. 있는데
일단 이것을 기억하자.
모든 진법엔 2가지의 보수가 존재한다.
R 진법엔 R의 보수와 R-1 의 보수가 존재한다.
10진법이라면 10의 보수와 9의 보수가 존재
2진법이라면 2의보수와 1의 보수가 존재 한다.
이진수의 1의 보수부터 알아보자
이진수의 1의 보수는 0과 1을 각각 뒤집으면된다.
0 → 1 로 1 → 0 으로 말이다.
예를들어 이진수 0000 1010 의 1의 보수는 1111 0101 이다.
사실 이건 편법이고 원리는 위의 십진수와 같다.
9의 보수가 합해서 9가 된것 처럼1의 보수는 합해서 1이 되는 수이다.
이진수 0000 1010 의 1의 보수를 구한다고 할 때
이진수 0000 1010과 1의보수는 서로 더하면 1111 1111이 된다.
이진수 + 1의보수 = 1111 1111
이진수를 우항으로 넘기면 1의보수의 값이 나옴.
1111 1111 - 0000 1010 = 1111 0101
구해진 1의 보수 1111 0101 과 뒤집은 값 1111 0101 이 같다.
여기서 최상위 비트는 + - 부호를 결정하는 부호비트로 사용되고
데이터로는 사용되지 않는다.
그래서 맨앞자리를 뺀 7비트만 사용됨.
이진수의 2의 보수를 알아보자
9의보수에 1을 더한게 10의 보수 였듯이
1의 보수에 1을 더한게 2의 보수이다.
컴퓨터는 1의 보수는 쓰지않고 2의 보수를 쓴다. 이유가 뭘까?
1의보수를 쓸경우
+0 → 0000 0000
-0 → 1111 1111
0이 2개가 생긴다.
0은 중요한 숫자라 문제가 생기면 안되기 때문에
비트 반전후 1을 더하면 -0이 깔끔하게 사라진다.
그래서 2의 보수를 쓴다.
그래서 결국 보수는 도데체 왜쓰는건가??
이유는 컴퓨터가 덧셈밖에 모르는 바보라서 그렇다.
컴퓨터를 포함한 각종 논리회로에서는 가산기를 사용하고
감산기를 사용하지 않는다.
왜냐하면 감산기를 만들면 엄청나게 복잡해지기 때문.
보수를 이용하면 더하기만으로 뺄셈을 할수 있기 때문에
보수를 이용하는 것이다. 곱셈은 더하기를 여러번 한것이고
나누기는 뺄셈을 여러번 하는것 뺄셈은 결국 덧셈으로 표현가능