2진법

진법
2진법8진법10진법
12진법16진법60진법

1 개요

binary numeral system, binary number system

세상엔 10종류의 사람이 있다. 이진법을 이해하는 사람과 그렇지 못한 사람.[1]

(There are 10 types of people in the world; those that understand BINARY and those that don't.)

2의 거듭제곱220219218217216215214213212211
10진수 표기1048576524288262144131072655363276816384819240962048
2진수 표기100000000000000000000100000000000000000001000000000000000000100000000000000000100000000000000001000000000000000100000000000000100000000000001000000000000100000000000
21029282726252423222120
10245122561286432168421
100000000001000000000100000000100000001000000100000100001000100101

콩콩진법
0과 1이라는 두 개의 숫자만을 사용하여 를 나타내는 진법.

인간은 10개의 손가락을 각 객체로 인지하여 펴지거나 접힌 것을 세는 셈법을 주로 써왔기에 오래 전부터 10진법을 사용해 왔지만, 전자기기의 경우는 손가락이 2개라서 신호를 특정 순서로 그룹화 하여 인지하기에 해당 신호가 켜졌는지(1), 꺼졌는지(0)를 구별하여[2] 2진법을 기반으로 발전하였다.

예시로 들자면, 인간은 손가락이 몇개 펴져있는지, 혹은 접혀있는지를 센다면, 기계는 손가락에 특정 순서를 할당하여 몇번째손가락이 펴지고 켜졌느냐를 파악하여 그것을 숫자로 인식하는 식이다.

2 표현법

표기는 xxx(2)와 같은 형태로 한다. 예를 들어 2는 한 자리 올려서 10(2), 6은 110(2)이 된다. 그 외에 숫자 끝에 아래첨자로 2를 작성하여 2진수임을 나타내는 방식도 있다. 컴퓨터 공학을 전공하는 사람들 중에는 이진수를 쓰고 뒤에 B를 붙이는 경우도 있는데, 이는 어셈블리어에서 2진수를 나타낼 때, 1100B 형식으로 작성하기 때문이다.

전자기기에서 음수는 첫자리(가장 높은 자리)의 수가 1인 것으로 나타낸다. 즉 첫 번째 숫자가 0이면 양수이고, 1이면 음수이다. 단 첫 번째 숫자만 바뀐다고 16이 -16이 된다거나 하는 건 절대 아니다! 1의 보수[3], 2의 보수 등의 방식이 있으며, 컴퓨터에서 가장 널리 사용되는 것은 2의 보수이다. 1의 보수는 양수에서 모든 비트를 반전시켜서 표현하는 것이고, 여기에 1을 더한 것이 2의 보수이다. 예를 들어보면 다음과 같다.

1) 0000 0101 = 숫자 5
2) 1111 1010 = 비트 반전 (1의 보수에서의 -5)
3) 1111 1011 = 1을 더함 (2의 보수에서의 -5)

1의 보수에서는 0000 0000 과 1111 1111 이 모두 0이 되므로 0이 두 가지로 표현되는 문제가 생긴다. 2의 보수 표기는 10진수와 상호 변환하기 가장 어려운 표기법이긴 하나, 연산에 있어서 양수와 음수를 똑같이 취급할 수 있다는 엄청난 이점이 있다.

예를 들어 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의 보수 표기법을 쓴다. 다만 이 방식은 그 대가로 치명적인 오류를 안고 있으므로 미리 방지하는 것이 필수이다.

일단 전기 신호가 들어온다, 안 들어온다라는 식으로 쉽게 구현할 수 있기 때문에 전자기기, 특히 컴퓨터에서 사용한다. 그리고 수1 지수 로그 파트에 출현해 수험생을 괴롭힌다(…). 물론 쫄지말고 10진법처럼 계산하면 생각보다는 쉽게 풀리긴 한다.

한편, 위에서 볼 수 있듯이 2진법은 0과 1만으로 숫자를 표기하다보니 숫자가 조금만 커져도 엄청난 수의 0과 1이 반복되는 아찔함을 선사한다. 그만큼 사람이 보기 빡세지는데, 요 가독성을 좀 높여보고자 16진법으로 바꿔서 표현하기도 한다.

변환하는 방법을 설명하자면, 100010111110110010101101010011001101010010110101101011010110012 라는 키보드의 0과 1을 막누른 느낌의숫자가 있다고 하자. 이걸 뒤에서(일의자리에서부터) 4자리씩 끊어서 (00)10 0010 1111 1011 0010 1011 0101 0011 0011 0101 0010 1101 0110 1011 0101 1001로 만든 뒤 4자리씩 16진법으로 변환해서 적으면 된다. 변환결과는 22FB2B53352D6B5916

이것도 여전히 길어보이지만 이렇게 바꾸면 길이가 1/4로 줄어들고 읽기도 그나마 편해진다.

여담으로 손가락을 접었을 때를 1, 손가락을 폈을 때를 0으로 가정한다거나 혹은 그 반대로 가정하여 이진수 셈법이 가능하다. 이에 따라 10개의 손가락을 가진 사람은 0부터 1023까지 손가락으로 셀 수 있다! [4]하지만 별로 쓸 데가 없고 중간에 셈을 하다보면 凸모양(4)으로 손가락이 펼쳐질 수도 있는 관계로(凸凸를 만들고 싶으면 132.) 남들 앞에서 쓰기 좀 곤란한 문제가 있다(…). 그리고 약지와 새끼 손가락의 경우 혼자 접었다 폈다 하기가 힘들다!잠이 안 올 때 양 세는 것 대신 하면 좋다!![5]

3 그 외

중학교 1학년 1학기에 나오기도 했으며 현재는 교육과정에서 제외되었다.[6] 이 때는 1101(2)를 10진법으로 나타내는 등 매우 간단한 문제들을 풀며, 때때로는 1에서부터 10까지의 곱을 구한 후 그것을 2진법으로 나타낸 다음 모든 자리수의 합을 구하라는 문제도 있다.

여기에서 엄지를 2의 보수 기호로 사용하면 4비트 연산을 손가락으로 해 볼 수 있다.

여기까지 읽었는데도 정 이해를 못하는 사람들을 위해 변환하는 예시를 들어보겠다.

예를 들어 숫자 14를 예를 들었을때,

14를 2로 나누면 7이 된다. 이때 2*7=14, 즉 나머지가 없으므로 옆에 0을 적는다.
7을 다시 2로 나누면 3이 된다. 이때 2*3=6, 즉 나머지가 1이므로 옆에 1을 적는다.
3을 다시 한번 2로 나누면 1이 된다. 이때 1*2=2, 즉 나머지가 1이므로 옆에 1을 적는다.
계산을 완료했다면 맨 아래에 1을 한 번 더 적고 아래부터 쭉 나머지를 읽으면 1110이 된다. 즉, 10진법의 14는 2진법으로는 1110이 된다.이것도 이해를 못 하겠는데

그럼 더 간단하게 생각해보자.

역시 14를 예를 들고
14를 이진법으로 나타냈을 때 ABCD가 된다면
8A+4B+2C+D=14 이면 된다.
물론 각 자리에는 0 또는 1만 집어넣을 수 있다.
그러면 8+4+2+0=14 가 된다.
같은 방법으로 다른 숫자도 해보자.[7]

좀 더 간단하게 하고싶으면,

이번엔 684를 예로 들어보자.
684를 2로 계속 나누다보면 (나누고 난 나머지는 무시하면 된다.)
684, 342, 171, 85, 42, 21, 10, 5, 2, 1 이 되는데,
이것들중 첫번째 자릿수만 구별하면 아주 쉬워진다.
첫번째 자릿수의 짝수를 0, 홀수를 1이라고 생각하면 [ 방향은 오른쪽에서 왼쪽방향으로 본다. ]
1010101100 이된다. 그런데 예시만 해도 벌써 3번째다.

사실 2진법은 음수 빼고는 이해하지 못 할 만한 건 없다. 음수도 모든 비트 반전 후 1 더하면 되고.

돌아다니는 마술 카드 중 60이나 64 내에서 상대가 생각하는 숫자 맞추기 같은 거는 이걸 사용한 것이다.

프로그래밍 언어 중에서 기계어가 이 이진법 숫자로만 되어 있다.
  1. 10진법의 숫자 '2'는 2진법에서 '10'이 된다. 그리고, 여기서 10은 반드시 아라비아 숫자로 적어야 한다는 점에 주의.
  2. 이 편이 인식이 간단해져 오류의 발생이 적고 속도를 쉽게 올릴 수 있기 때문.
  3. 補數, complement
  4. 사실 손바닥 뒤집기를 포함시키면 4095까지 가능하다. 손가락 반만 접기나 접고 내밀기 같은 거 넣으면 1048575까지 가능하다. 4진법이라는 건 함정
  5. 중간에 수를 잊어먹어도 손가락을 계산해 다시 셀 수 있고 1023이라는 큰 수까지 셀 수 있어서 양을 세는 것보다 훨 낫다.그럼 잠이 안 오잖아
  6. 단 공고 같은 경우 정보기술과 활용 과목에서 나온다.
  7. 이것도 이해하기 힘들다면, 14보다 작되, 가장 큰 2의 거듭제곱수인, 8을 14에서 빼고 2^3의 자리에 1을 적는다. 남은 6을 1 또는 0이 남을 때까지 위의 과정을 반복하면 된다. 1110이 된다.