본문 바로가기

CS/Etc

컴퓨터와 2진법의 관계

728x90

 

 

목차


  • 2진법 이란?
  • 2진법의 표현법
  • 컴퓨터와 2진법의 관계
  • 컴퓨터가 2진법을 사용하는 이유
  • 컴퓨터는 왜 기술이 진보한 지금까지도 2진법을 사용할까?
  • C언어로, 10진법을 2진법으로 바꿔주는 프로그램 개발

 

 

2진법 이란?


인간은 10진법을 사용하고 있다.

10진법이란, 0~9라는 10가지의 숫자를 이용해서 수를 나타내는 진법이다.

그렇다면 2진법은 무엇일까?

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

따라서, 진법에 따라 같은 수가 다르게 표현되기도 한다.

10진법 2진법
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010

 

(+ 8진법은 0~7을 사용하고, 16진법은 0~9와 A~F까지 총 15의 기호를 사용해서 수를 나타낸다.)

 

 

2진법의 표현법


예를 들어, 2진법으로 표현된 1101을 10진법으로 변환시켜보면 13이 된다.

 

또 다른 예로, 2진법으로 표현된 110을 10진번으로 변환시키보면 6이 된다.

 

 

컴퓨터와 2진법의 관계


컴퓨터 내부에는 수많은 트랜지스터가 존재한다.

트랜지스터는 전기 신호로 작동하는 스위치이고, 전기신호가 들어오면 켜지고 들어오지 않으면 꺼진다.

이때 전기 신호가 들어오면 ON 또는 TRUE 상태이고, 컴퓨터는 이것을 1로 인식한다.

반대로 전기 신호가 없으면 OFF 또는 FALSE 상태이고, 컴퓨터는 이것을 0으로 인식한다.

따라서, 컴퓨터는 트랜지스터를 통해 전기 신호를 0과 1로 구분하여 처리한다.

컴퓨터는 2진법을 기반으로 작동한다.

 

 

컴퓨터가 2진법을 사용하는 이유


컴퓨터가 2진법은 사용하는 이유는 오류의 최소화와 효율성(비용, 시간) 때문이다.

컴퓨터는 전기를 활용하여 수많은 트렌지스터를 ON/OFF하는 행위를 반복한다.

2진수를 기반으로, 전기적 신호를 01로만 처리한다.

하지만 3이상의 n진수을 사용하게 되면, 전기적 신호는 n가지의 경우로 구분 된다.

그렇게 되면, 오류 발생량과 소요 시간 및 비용은 증가하게 된다.

결과적으로 연산 속도는 빨라지지만, 전기적 신호를 구분하는데에는 비효율적이게 되는 것이다.

따라서, 2진수를 기반으로 컴퓨터 시스템이 운영될 때, 오류를 최소화하고 효율적인 시스템 구축이 가능하다.

 

 

컴퓨터는 왜 기술이 진보한 지금까지도 2진법을 사용할까?


우선 위에서 언급했듯이, 2진수를 이용한 컴퓨터가 가장 정확성이 높고, 효율적이기 때문이다.

또한, 2진수 사용을 전면 대체할 만큼의 기술적 발전은 아직 이루어지지 않은 상태라고 생각한다.

그러므로 2진수를 기반으로 이미 표준화된 수많은 컴퓨터 시스템을 바꾸는 것은 가능성이 희박하다고 생각한다.

하지만 최근 3진법 반도체 구현 양자컴퓨터 개발이 진행되고 있다.

만약 3진법을 이용하여, 오류를 최소화하면서 계산 능력을 훨씬 뛰어난 컴퓨터가 개발된다면

그리고 2진법으로 표준화된 컴퓨터 시스템들을 모두 3진법 시스템으로 쉽게 교체할 수 있는 상황이 된다면

앞으로는 3진법 기반의 컴퓨터가 상용화될 수도 있다고 생각한다.

 

 

C언어로, 10진법을 2진법으로 바꿔주는 프로그램 개발


소스 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){

	// num_10은 10진법 숫자, num_2는 2진법 숫자
	int num_10;
	int num_2[8];

	// 변환하고 싶은 10진법 숫자 입력받기
	printf("2진법으로 변환하고 싶은 10진법 (100이하의 자연수): ");
	scanf("%d", &num_10);

	// 2진법 숫자로 변환하기
	for (int i = 7; i >= 0; i--) {
		num_2[i] = num_10 % 2;
		num_10 = num_10 / 2;

	}
	
	// 변환한 2진법 숫자 출력
	printf("변환한 2진법:");
	for (int i = 0; i < 8; i++) {
		printf("%d", num_2[i]);
	}


	return 0;
}

 

출력 예시

15를 2진법으로 바꾼 예시                                                               27을 2진법으로 바꾼 예시

 

 

 


 

위 글은 edwith 사이트의 <cs50> 강의 시청과

부스트 코딩 뉴비 챌린지 2020 활동 팀원들과 토론을 통해 공부한 내용을 작성한 것 입니다.

내용상 오류가 있다면 댓글로 적어주세요. 🖐

2020/07/23 - [Life/2020] - [대외활동] 부스트 코딩 뉴비 챌린지 2020

 

[대외활동] 부스트 코딩 뉴비 챌린지 2020

기간 2020 / 07 / 10 ~ 2020 / 08 / 28 동기 저번에 빅데이터 전문가 자격증을 공부하고 나서 컴퓨터 기초 지식을 공부할 필요성을 느꼈다. 그래서 공부할 방법을 알아보다가 부스트 코딩 뉴비 챌린지 202

all-young.tistory.com

 

'CS > Etc' 카테고리의 다른 글

HTML의 주요 태그  (1) 2020.09.17
HTML의 개념, 기본 구조, 요소(element) 구조  (0) 2020.09.16
비트와 바이트  (0) 2020.08.20