| r4 vs r5 | ||
|---|---|---|
| ... | ... | |
| 7 | 7 | |
| 8 | 8 | '''2진법'''은 0과 1이라는 두 개의 숫자만을 사용하여 수를 나타내는 진법을 말한다. 미적분학의 창시자이기도 한 고트프리트 빌헬름 라이프니츠가 고안하였다. |
| 9 | 9 | |
| 10 | 인간은 10개의 손가락을 각각의 객체로 인지하여 펴지거나 접힌 것을 세는 셈법을 주로 써왔기에 오래전부터 | |
| 10 | 인간은 10개의 손가락을 각각의 객체로 인지하여 펴지거나 접힌 것을 세는 셈법을 주로 써왔기에 오래전부터 10진법을 사용해 왔지만, 전자 기기의 경우는 신호를 특정 순서로 그룹화하여 인지하기에 해당 신호가 켜졌는지(1), 꺼졌는지(0)를 구별하기 때문에[* 이 편이 인식이 간단해져 오류의 발생이 적고 속도를 쉽게 올릴 수 있기 때문이다. 즉, 논리 회로에선 이 0과 1을 단순히 숫자가 아닌 서로를 반대하는 기호라고 이해하는 게 쉽다.] 2진법을 기반으로 발전하였다. | |
| 11 | 11 | |
| 12 | 12 | 예시로 들자면, 인간은 손가락이 '''몇 개''' 펴져있는지, 혹은 접혀있는지를 센다면, 기계는 손가락에 특정 순서를 할당하여 '''몇 번째''' 손가락이 펴지고 접혔는지를 파악하여 그것을 숫자로 인식하는 식이다. 그래서 손가락 5개로 사람은 0부터 5까지 세지만, 기계는 0부터 2^^5^^-1=31까지 셀 수 있으며, 검지, 중지, 약지, 새끼를 펴고 엄지만 굽힌다면 사람은 '4'라고 인식하겠지만 기계는 2^^3^^+2^^2^^+2^^1^^+2^^0^^=15로 인식할 것이다. 이론상 열 손가락으로 0부터 1023까지 셀 수 있다.[* 손바닥을 보이게 두 손을 놓은 후, 손가락을 다 접은 게 0이다. 그 상태에서 오른손 엄지를 피면 2^0, 그리고 오른손 검지까지 펴면 2^^0^^ + 2^^1^^, 이러한 방식으로 오른손 소지를 편 후엔 왼손 소지로 넘어가서 쭉 왼손 엄지까지 가면 열 손가락을 다 펴게 되어 2^^0^^ + 2^^1^^ + 2^^3^^ + ... + 2^^9^^ = 1023까지 셀 수 있다.] |
| 13 | 13 | |
| 14 | 14 | == 표현법 == |
| 15 | xxx(2)와 같은 형태로 표기한다. 예를 들어 2는 한 자리 올려서 10(2), 6은 110(2)이 된다. 그 외에 숫자 끝에 아래첨자로 2를 작성하여 1100,,2,,처럼 2진수임을 나타내는 방식도 있다. | |
| 15 | xxx(2)와 같은 형태로 표기한다. 예를 들어 2는 한 자리 올려서 10(2), 6은 110(2)이 된다. 그 외에 숫자 끝에 아래첨자로 2를 작성하여 1100,,2,,처럼 2진수임을 나타내는 방식도 있다. 컴퓨터 공학을 전공하는 사람들 중에는 이진수를 쓰고 뒤에 B를 붙이는 경우도 있는데, 이는 어셈블리어에서 2진수를 나타낼 때 1100B 형식으로 작성하기 때문이다. 비슷하게 프로그래머의 경우 몇몇 프로그래밍 언어[* 그 [[C(프로그래밍 언어)|C언어]]가 바이너리 리터럴을 지원하지 않기 때문에 사실 대중적인 표현이라고 하긴 힘들다. 즉 이 방식을 쓰지 않는 프로그래머도 많다는 말. 프로그래머들은 디버깅, 리버싱, 덤핑 등 온갖 일에는 주로 [[16진법]]을 사용하기도 하고....]에서 쓰는 방식대로 0b1100처럼 앞에 0b를 붙히기도 한다. 특히나 4자리씩 띄워서 읽는다면 100% 컴공과. | |
| 16 | 16 | |
| 17 | 17 | 전자 기기에서 음수는 첫 자리(가장 높은 자리)의 수가 1인 것으로 나타낸다. 즉 첫 번째 숫자가 0이면 양수이고, 1이면 음수이다. 이건 그냥 컴퓨터의 정수 표기법에 대한 약속이고 진법 자체와는 관련이 없다. 1의 보수(1's complement, 1'C)[* 補數, complement], 2의 보수(2's complement, 2'C) 등의 방식이 있으며, 컴퓨터에서 가장 널리 사용하는 것은 2의 보수이다. 1의 보수는 양수에서 모든 비트를 반전시켜서 표현하는 것이고, 여기에 1을 더한 것이 2의 보수이다. 예를 들어보면 다음과 같다. |
| 18 | 18 | * {{{0000 0101}}} = 숫자 5 |
| ... | ... | |
| 20 | 20 | * {{{1111 1011}}} = 비트 반전에 1을 더함 (2의 보수에서의 -5) |
| 21 | 21 | 1의 보수에서는 0000 0000과 1111 1111이 모두 0이 되므로 0이 두 가지로 표현되는 문제가 생긴다. 2의 보수 표기는 10진수와 상호 변환하기 가장 어려운 표기법이긴 하나[* 그래봤자 별거 없다. 비트 반전시키고 1 더하면 끝이다.], 연산에서 양수와 음수를 똑같이 취급할 수 있다는 엄청난 이점이 있다. |
| 22 | 22 | |
| 23 | 예를 들어 3 + (-5)를 한다고 하자. 2의 보수 표기법에서는 0000 0011 + 1111 1011이 되고 계산해 보면 1111 1110 = -2가 된다. 마치 둘 다 양수인 양 더했더니 올바른 값이 나와버렸다. 이는 음수+음수도 마찬가지다. -5 + (-7) = 1111 1011 + 1111 1001 = 1 1111 0100 = 1111 0100 = -12이다. 다른 어떤 음수 표기법도 부호 확인 없이 때려 넣으면 저렇게 정답이 나오지 않는다. 이렇게 연산 과정에서 부호를 고려할 필요가 없다는 점은 속도에 약간의 이익을 주는데, 덧셈과 뺄셈이라는 연산은 CPU 내에서 10진수로 출력하기 따위와는 비교가 불가능할 정도로 많이 하는 연산이므로 컴퓨터는 내부적으로 2의 보수 표기법을 쓴다. 다만 이 방식은 그 대가로 | |
| 23 | 예를 들어 3 + (-5)를 한다고 하자. 2의 보수 표기법에서는 0000 0011 + 1111 1011이 되고 계산해 보면 1111 1110 = -2가 된다. 마치 둘 다 양수인 양 더했더니 올바른 값이 나와버렸다. 이는 음수+음수도 마찬가지다. -5 + (-7) = 1111 1011 + 1111 1001 = 1 1111 0100 = 1111 0100 = -12이다. 다른 어떤 음수 표기법도 부호 확인 없이 때려 넣으면 저렇게 정답이 나오지 않는다. 이렇게 연산 과정에서 부호를 고려할 필요가 없다는 점은 속도에 약간의 이익을 주는데, 덧셈과 뺄셈이라는 연산은 CPU 내에서 10진수로 출력하기 따위와는 비교가 불가능할 정도로 많이 하는 연산이므로 컴퓨터는 내부적으로 2의 보수 표기법을 쓴다. 다만 이 방식은 그 대가로 치명적인 오류를 안고 있어서 미리 방지하는 것이 필수이다. | |
| 24 | 24 | |
| 25 | 25 | 일단 전기 신호가 들어온다, 안 들어온다라는 식으로 쉽게 구현할 수 있어서 전자 기기, 특히 컴퓨터에서 사용한다. 그리고 고등학교 수학 과정의 지수/로그 파트에 출현해 수험생을 괴롭힌다. 물론 쫄지 말고 10진법처럼 계산하면 생각보다는 쉽게 풀리긴 한다. |
| 26 | 26 | |
| ... | ... | |
| 31 | 31 | [[컴퓨터과학|컴퓨터 과학]]을 공부하다 보면 [[이진로그|이진 로그]]라는 것을 배우게 되는데, 2진법으로 표기된 수를 좀 더 쉽게 다룰 수 있게 한다. |
| 32 | 32 | |
| 33 | 33 | == 이진법을 이용한 수 표기의 예시 == |
| 34 | ||<tablebgcolor=#fff,#1f2023><colbgcolor=#96887b><colcolor=#fff> ''' | |
| 34 | ||<tablebgcolor=#fff,#1f2023><colbgcolor=#96887b><colcolor=#fff> '''2의 거듭제곱''' || 2^^20^^ || 2^^19^^ || 2^^18^^ || 2^^17^^ || 2^^16^^ || 2^^15^^ || 2^^14^^ || 2^^13^^ || 2^^12^^ || 2^^11^^ ||<|3> || | |
| 35 | 35 | || '''10진수 표기''' || 1048576 || 524288 || 262144 || 131072 || 65536 || 32768 || 16384 || 8192 || 4096 || 2048 || |
| 36 | 36 | ||<bgcolor=#765432> '''2진수 표기''' || 100000000000000000000 || 10000000000000000000 || 1000000000000000000 || 100000000000000000 || 10000000000000000 || 1000000000000000 || 100000000000000 || 10000000000000 || 1000000000000 || 100000000000 || |
| 37 | || ''' | |
| 37 | || '''2의 거듭제곱''' || 2^^10^^ || 2^^9^^ || 2^^8^^ || 2^^7^^ || 2^^6^^ || 2^^5^^ || 2^^4^^ || 2^^3^^ || 2^^2^^ || 2^^1^^ ||{{{#!wiki style="word-break: keep-all" | |
| 38 | 38 | 2^^0^^}}} || |
| 39 | 39 | || '''10진수 표기''' || 1024 || 512 || 256 || 128 || 64 || 32 || 16 || 8 || 4 || 2 || 1 || |
| 40 | 40 | ||<bgcolor=#765432> '''2진수 표기''' || 10000000000 || 1000000000 || 100000000 || 10000000 || 1000000 || 100000 || 10000 || 1000 || 100 || 10 || 1 || |
| ... | ... | |
| 74 | 74 | |
| 75 | 75 | 컴퓨터가 사용하는 언어다보니 [[공대생]], 특히 컴공과 학생이라면 질리도록 사용하게 된다. 나중 가면 그냥 2진수로 써있는걸 보고 자연스럽게 10진수로 바로 읽을 정도가 된다. 물론 2진수와 10진수를 전환해가며 계산하는건 실용성은 없는 부분이고 그만큼 2진수가 익숙해진다는 의미이며, 컴퓨터가 할 수 있는 가장 빠른 연산 중 하나가 [[비트(정보 단위)|비트 연산]]이다보니 컴퓨터가 2진수를 어떻게 다루는지 정도는 컴공과라면 거의 필수적으로 숙련이 필요하다. |
| 76 | 76 | |
| 77 | 2001년 1월 1일에 태어난 사람의 주민등록번호 앞자리는 010101(21)이다. | |
| 77 | 2001년 1월 1일에 태어난 사람의 주민등록번호 앞자리는 010101(21)이다.정지윤과 윈터가 대표적인 예이다. 한편 011111(31)인 사람은 이다현이다. | |
| 78 | 78 | |
| 79 | '악마의 계단 함수'라고 불리는 | |
| 79 | '악마의 계단 함수'라고 불리는 병리적 함수의 정의에도 2진법이 쓰인다. | |
| 80 | 80 |