최근 수정 시각 : 2019-11-04 10:20:11

2진법

이진법에서 넘어옴
진법
2진법 8진법 10진법
12진법 16진법 60진법


1. 개요2. 표현법3. 이진법을 이용한 수 표기의 예시4. BCD 코드5. 그 외

1. 개요

binary numeral system

0과 1이라는 두 개의 숫자만을 사용하여 를 나타내는 진법. 미적분학의 창시자이기도 한 라이프니츠가 고안하였다.

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

예시로 들자면, 인간은 손가락이 몇 개 펴져있는지, 혹은 접혀있는지를 센다면, 기계는 손가락에 특정 순서를 할당하여 몇 번째 손가락이 펴지고 접혔는지를 파악하여 그것을 숫자로 인식하는 식이다. 그래서 손가락 5개로 사람은 0부터 5까지 세지만, 기계는 0부터 25-1=31까지 셀 수 있으며, 검지, 중지, 약지, 새끼를 펴고 엄지만 굽힌다면 사람은 '4'라고 인식하겠지만 기계는 23+22+21+20=15로 인식할 것이다. 이론상 열 손가락으로 1023까지 셀 수 있다.[2]

2. 표현법

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

전자기기에서 음수는 첫자리(가장 높은 자리)의 수가 1인 것으로 나타낸다. 즉 첫 번째 숫자가 0이면 양수이고, 1이면 음수이다. 이건 그냥 컴퓨터의 정수 표기법에 대한 약속이고 진법 자체와는 관련이 없다. 1의 보수(1's complement, 1'C)[3], 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진수와 상호 변환하기 가장 어려운 표기법이긴 하나, 연산에 있어서 양수와 음수를 똑같이 취급할 수 있다는 엄청난 이점이 있다.

예를 들어 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 라는 숫자가 있다고 하자. 이걸 뒤에서(일의자리에서부터) 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]까지 손가락으로 셀 수 있다!

3. 이진법을 이용한 수 표기의 예시

2의 거듭제곱 220 219 218 217 216 215 214 213 212 211
10진수 표기 1048576 524288 262144 131072 65536 32768 16384 8192 4096 2048
2진수 표기 100000000000000000000 10000000000000000000 1000000000000000000 100000000000000000 10000000000000000 1000000000000000 100000000000000 10000000000000 1000000000000 100000000000
210 29 28 27 26 25 24 23 22 21 20
1024 512 256 128 64 32 16 8 4 2 1
10000000000 1000000000 100000000 10000000 1000000 100000 10000 1000 100 10 1

4. BCD 코드

Binary-Coded Decimal의 약어이며, 쉽게 말해서 10진수 형태를 띈 2진수라고 하면 좋을듯 하다.

BCD는 0000{010} ~ 1001{910}까지 있고, 나머지 1010 ~ 1111는 없는 숫자 취급한다.

표기 방식은 의외로 쉽다. 각 자릿수에 해당하는 2진 코드를 작성하는 것.
ex) 36510 ==> 0011(1) 0110(2) 0101(3)BCD
(1) = 100의 자리 / (2) = 10의 자리 / (3) = 1의 자리

이렇게 되면 덧셈이 중요해지는데, 그냥 2진수 덧셈이랑 같은 방식으로 하는데, 만약 특정 자릿수가 9를 초과하면 0110BCD = 610을 더해주면 된다.[5]
ex) 56 + 48 = 0101 0110BCD + 0100 1000BCD
= 1001 1110BCD + 0000 0110BCD
= 1010 0100BCD = 10410

초기 공학용 계산기 등에서 사용되었다. 다만 2진법으로 10진법을 표현하고 계산하는 것 보단 그냥 2진법으로 계산한 뒤 결과만 10진법으로 변환해주는 것이 모든 면에서 낫기 때문에 현재는 거의 사용되지 않는다.

5. 그 외

세상엔 10종류의 사람이 있다. 이진법을 이해하는 사람과 그렇지 못한 사람 그리고 이게 설마 삼진법이라고 생각하지 못한사람.
(There are 10 types of people in the world; those that understand BINARY, and those who don't, and those who didn't expect this number to be TERNARY.)
10진법의 숫자 '2'는 2진법에서 '10'이 되며, 3진법에서는 3이 '10'이라는 것을 이용한 공대 개그가 있다.

중학교 1학년 1학기에 나오기도 했으며 예를 들면 2012년 중학교 입학생은 이때 이진법을 배웠으나 현재는 교육과정에서 제외되었다.[6]

컴퓨터의 정보처리에 이진수가 쓰인다는점에 의거해, 뭔가 사이버스러운 작품에는 이진수가 도배되는 경우가 많다. 배경이 의미없는 이진수 숫자로 채워져 있다든지... 0과 1만 적당히 치면 되니 만들기도 쉽다.

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

프로그래밍 언어 중에서 기계어가 이 이진법 숫자로만 되어 있다. 또한 프로그램 배포 시 '바이너리'라 하면 .exe와 같은 실행 파일을 뜻한다.

[1] 이 편이 인식이 간단해져 오류의 발생이 적고 속도를 쉽게 올릴 수 있기 때문.[2] 손바닥을 보이게 두 손을 놓은 후, 손가락을 다 접은게 0이다. 그리고 오른손 엄지를 피면 2^0, 오른속 검지를 펴면 20 + 21, 오른손 소지를 편 후엔 왼손 소지로 넘어가서 쭉 왼손 엄지까지 가면 열 손가락을 다 펴게되어 20 + 21 + 23 + ... + 29 = 1023 까지 셀 수 있다.[3] 補數, complement[4] 210-1[5] 이는 위에 언급되었던 1010BCD ~ 1111BCD을 건너뛰기 위함.[6] 단 공고 같은 경우 정보기술과 활용 과목에서 나온다.

분류