강의 출처
이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)
인프런 강의 - 그림으로 쉽게 배우는 자료구조와 알고리즘 (심화편)
인프런 강의 - 만들면서 쉽게 배우는 컴퓨터 구조
목차
- 10진법과 2진법
개요
- 사람들이 숫자를 표현할 때 10진법 사용 (0부터9까지 사용)
- 컴퓨터가 사용하는 언어 2진법 (0과1 사용)
- 자릿수가 굉장히 중요한데, 2진수 👉🏻 10진수로 표현하는 법을 알아보자
1️⃣2진수 -> 10진수

- 위 변환 표 처럼, 자릿수가 중요하다.
- 하나씩 계산하면 어려우니깐, 쉽게 변환하는 방법이 있다.
1101은 10진수 값으로 무엇일까?

- 자릿수를 2의n승으로 표현하고 , 그 자리에 들어있는 값을 곱하여 , 모든 자릿수의 합계를 구하면 10진수로 변환이 가능하다.
- 참고로 2의 0승은 1이다.
2️⃣10진수 -> 2진수
10진수 "9" 를 2진수로 변환 시켜보자.
9를 2로 나누면 = 몫이 4 나머지 1
- 몫인
4를 2로 나누면 = 몫이 2 나머지 0
- 이렇게 몫이
0이 될때 까지 계속 나눠준다.
- 이렇게 해서 나온 몫과 나머지를 역순으로 조합하면 2진수 변환 끝

3️⃣16진법
- 0부터 9까지는 숫자 + 10부터는
A-F 알파벳 사용
- 2진수를 왜 16진법으로 사용해야할까?
- 이유 : 10진수보다 더 "단순" 해지기 때문이다.
2진수와 16진수의 차이


표기법
- 10진수와 2진수 16진수 모두 의미하는 값이 다르기 때문에, 표기법이 중요하다.
- 10진수는 보통 생략하고, 2진수는
0b 를 앞에 붙이고, 16진수는 0x를 붙여준다.
4️⃣빅엔디안, 리틀엔디안
- 비트를 배우기 위해 꼭 알아야 하는 개념이 빅엔디안과 리틀엔디안이다.
- 예시 그림으로 확인해보자.
- 한 공간에, 8비트 =
1바이트로 나눠진 메모리가 있다고 가정해보자.

- 그러면 위 예시처럼
1바이트단위로 데이터가 한층씩 차곡차곡 쌓일 것.
- 우리가 넣을 데이터가 32비트 , 즉
4바이트라고 이루어진 데이터가 있으면?

주소를 채우는 방향에 따라 달라지는 방식
- 낮은 주소를 아래부터 채우는 방식이 : 리틀 엔디안
- 높은 주소를 아래부터 채우는 방식이 : 빅 엔디안
- 뭐가 더 좋다! 라고 뚜렷하게 얘기는 못하고 , 상황에 따라 사용하되! 가장 중요한건 데이터가 섞이지 않게 하는 것이 중요하다

5️⃣ 오버플로우와 인터럽트
오버플로우란?
- 개념 : 어떤 계산의 결과로 유효한 비트의 범위를 넘는 현상을 " 오버플로우 " 라고 한다.
- 우리가 계산한 비트의 범위는 정해져 있는데, 계산하면서 그 비트 범위를 넘어가고, 그 넘어간 비트는 짤리게 된다 -> 그러면 값이 변하겠지.
인터럽트란?

- 개념 : 오버플로우가 발생하면, 진행 중인 동작을 멈추고 "인터럽트"처리를 하도록 함.
- CPU가 어떤 동작을 수행하더라도, 즉시 중단하고 "인터럽트 동작"을 처리함
- 말 그대로 , 작업을 중간에 가로챔.
- 그래서 , 특정 인터럽트 상황이 발생하면 등록된 인터럽트 서비스 루틴 (ISR)을 통해 상황을 처리한다.
- ISR 서비스 수행하고 , 원래 수행 하던 동작으로 재개함.
인터럽트는 오버플로우 외에도 다양한 상황에서 발생 할 수 있음.
필요에 따라 "비활성화 " 할 수 있다.
외부 인터럽트 & 내부 인터럽트
외부 인터럽트 : 키보드, 마우스 , 전원 , 네트워크 카드에서 발생
내부 인터럽트 : 실행 되고 있는 프로그램에서 발생
( 앞서 예제로 나왔던 오버플로우는 내부인터럽트의 대표적 예시 )