하트위키
최근 변경
최근 토론
임의 문서
도구
최근 변경
2진수
(r1 편집)
[오류!]
편집 권한이 부족합니다. 로그인된 사용자(이)여야 합니다. 해당 문서의
ACL 탭
을 확인하시기 바랍니다.
닫기
RAW 편집
[[분류:진법]] [include(틀:진법)] [목차] == 개요 == {{{+1 二進法 / binary}}} '''2진법'''은 0과 1이라는 두 개의 숫자만을 사용하여 수를 나타내는 진법을 말한다. 미적분학의 창시자이기도 한 고트프리트 빌헬름 라이프니츠가 고안하였다. 인간은 10개의 손가락을 각각의 객체로 인지하여 펴지거나 접힌 것을 세는 셈법을 주로 써왔기에 오래전부터 [[10진수|10진법]]을 사용해 왔지만, 전자 기기의 경우는 신호를 특정 순서로 그룹화하여 인지하기에 해당 신호가 켜졌는지(1), 꺼졌는지(0)를 구별하기 때문에[* 이 편이 인식이 간단해져 오류의 발생이 적고 속도를 쉽게 올릴 수 있기 때문이다. 즉, 논리 회로에선 이 0과 1을 단순히 숫자가 아닌 서로를 반대하는 기호라고 이해하는 게 쉽다.] 2진법을 기반으로 발전하였다. 예시로 들자면, 인간은 손가락이 '''몇 개''' 펴져있는지, 혹은 접혀있는지를 센다면, 기계는 손가락에 특정 순서를 할당하여 '''몇 번째''' 손가락이 펴지고 접혔는지를 파악하여 그것을 숫자로 인식하는 식이다. 그래서 손가락 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까지 셀 수 있다.] == 표현법 == xxx(2)와 같은 형태로 표기한다. 예를 들어 2는 한 자리 올려서 10(2), 6은 110(2)이 된다. 그 외에 숫자 끝에 아래첨자로 2를 작성하여 1100,,2,,처럼 2진수임을 나타내는 방식도 있다. 컴퓨터 공학을 전공하는 사람들 중에는 이진수를 쓰고 뒤에 B를 붙이는 경우도 있는데, 이는 어셈블리어에서 2진수를 나타낼 때 1100B 형식으로 작성하기 때문이다. 전자 기기에서 음수는 첫 자리(가장 높은 자리)의 수가 1인 것으로 나타낸다. 즉 첫 번째 숫자가 0이면 양수이고, 1이면 음수이다. 이건 그냥 컴퓨터의 정수 표기법에 대한 약속이고 진법 자체와는 관련이 없다. 1의 보수(1's complement, 1'C)[* 補數, complement], 2의 보수(2's complement, 2'C) 등의 방식이 있으며, 컴퓨터에서 가장 널리 사용하는 것은 2의 보수이다. 1의 보수는 양수에서 모든 비트를 반전시켜서 표현하는 것이고, 여기에 1을 더한 것이 2의 보수이다. 예를 들어보면 다음과 같다. * {{{0000 0101}}} = 숫자 5 * {{{1111 1010}}} = 비트 반전 (1의 보수에서의 -5) * {{{1111 1011}}} = 비트 반전에 1을 더함 (2의 보수에서의 -5) 1의 보수에서는 0000 0000과 1111 1111이 모두 0이 되므로 0이 두 가지로 표현되는 문제가 생긴다. 2의 보수 표기는 10진수와 상호 변환하기 가장 어려운 표기법이긴 하나[* 그래봤자 별거 없다. 비트 반전시키고 1 더하면 끝이다.], 연산에서 양수와 음수를 똑같이 취급할 수 있다는 엄청난 이점이 있다. 예를 들어 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의 보수 표기법을 쓴다. == 이진법을 이용한 수 표기의 예시 == ||<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> || || '''10진수 표기''' || 1048576 || 524288 || 262144 || 131072 || 65536 || 32768 || 16384 || 8192 || 4096 || 2048 || ||<bgcolor=#765432> '''2진수 표기''' || 100000000000000000000 || 10000000000000000000 || 1000000000000000000 || 100000000000000000 || 10000000000000000 || 1000000000000000 || 100000000000000 || 10000000000000 || 1000000000000 || 100000000000 || || '''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" 2^^0^^}}} || || '''10진수 표기''' || 1024 || 512 || 256 || 128 || 64 || 32 || 16 || 8 || 4 || 2 || 1 || ||<bgcolor=#765432> '''2진수 표기''' || 10000000000 || 1000000000 || 100000000 || 10000000 || 1000000 || 100000 || 10000 || 1000 || 100 || 10 || 1 || == BCD 코드 == binary-coded decimal(이진화 십진법)의 약어이며, 10진수의 각 자리수를 모두 분리해서 각각 2진수 형태로 표현한 것이다. 10진수의 한 숫자를 표현하기 위해서 BCD로 총 4자리의 2진수가 된다. 즉 10진수의 모든 숫자를 각각 0000{0,,10,,} ~ 1001{9,,10,,}로 옮길 수 있으며, 이때 나머지 1010 ~ 1111는 사용하지 않는다. 표기 방식은 각 자릿수마다 해당하는 4자리 2진수로 변환하면 된다. ex) 365,,10,, ==> 0011^^(1)^^ 0110^^(2)^^ 0101^^(3)^^,,BCD,, (1) = 100의 자리 / (2) = 10의 자리 / (3) = 1의 자리 이렇게 되면 덧셈이 중요해지는데, 그냥 2진수 덧셈이랑 같은 방식으로 하는데, 만약 특정 자릿수가 9를 초과하면 0110,,BCD,, = 6,,10,,을 더해주면 된다.[* 이는 위에 언급되었던 사용하지 않는 표현 1010,,BCD,, ~ 1111,,BCD,,을 건너뛰기 위함.] ex) 56 + 48 = 0101 0110,,BCD,, + 0100 1000,,BCD,, = 1001 1110,,BCD,, + 0000 0110,,BCD,, = 1010 0100,,BCD,, = 104,,10,, 초기 공학용 계산기 등에서 사용되었다. 얼핏 보기에는 비효율적일 수도 있지만 정밀한 소수를 다뤄야 할 때에는 2진수와 10진수를 변환하면서 손실이 발생하는 것이 불가피하기 때문에 BCD를 사용하는 경우도 있다. 이걸 제대로 처리하지 못해서 발생한 문제가 '''2010년 문제'''이다. 이 코드를 확장한 IBM에서 만든 EBCDIC 코드도 존재하며 256가지의 문자를 표현할 수 있다. == 기타 == 8진법과 16진법은 2진법과 본질적으로 다를 게 없다. 2진법을 가독성 좋게 기준을 정해 묶어서 계산한다. 이와 같이 생각하면 1048576(2^^20^^)진법과 2진법도 완벽히 동일한 시스템에 구속되어 있다.
Liberty
|
the tree