프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.
1101(2)의 음수를 2의 보수 표현법으로 구해 보세요.
1101 → (모든 0과 1 뒤집기) 0010 → (1 더하기) 0011
1101(2)을 음수로 표현한 값은 0011(2) 입니다.
후입선출(Last In First Out) 구조의 한쪽 끝이 막혀 있는 저장 공간
PUSH: 스택에 새로운 데이터를 저장 (= 밀어 넣기)
POP: 스택에 (마지막에) 저장된 데이터 꺼내기
선입선출(First In First Out) 구조의 양쪽이 열려 있는 저장 공간
Enqueue: 큐의 마지막 부분에 새로운 데이터 저장
Dequeue: 큐의 맨 앞쪽 데이터 꺼내기
(+ 아직 비전공자의 관점에서 문제 해결에 직접적으로 필요한 경우는 드물다고 생각한다. 코딩 테스트나 기술 면접 같은 경우라면 모르겠지만 말이다.)
(+ 반면 좀 더 크게 다가온 건, 성능/용량/비용이다. 전역 후 컴퓨터를 맞출 때 다나와를 보고 있을 때나, 작업 관리자에서 낯선 단어를 헤치고 응답 없는 프로세스를 꺼야 할 때, IT 유튜버들이 CPU 클럭과 메모리 대역폭이 어떻게 되니, 이런 이야기들을 들을 때 어림짐작으로만 대충 그런 뜻이겠거니 하는 순간이 많았다. 이 책에서는 그 말이 무슨 의미인지를 알려주는 데 있어 큰 의의가 있다고 생각한다. 단순히 기술적인 내용을 나열한 것이 아닌, 명쾌한 비유를 들고 설명해 준 덕분에, 이 두꺼운 책을 덮어버리지 않고 나아갈 수 있었다.)
정적 정보인 데이터는 명령어를 통해 조작되고 컴퓨터를 동작시킨다.
메모리(RAM)에는 실행되는 프로그램의 명령어와 데이터가 저장되어 있고,
CPU는 메모리에서 명령어를 읽고→해석하고→실행한다.
보조기억장치는 컴퓨터의 전원이 꺼져도 기억할 내용을 저장하고,
입출력장치는 사용자가 컴퓨터 내부가 정보를 교환할 수 있도록 해준다.
컴퓨터 부품을 연결해 주는 메인보드(또는 마더보드)는 '버스'라는 통로를 통해 서로 정보를 주고받는데, 위의 네 가지 핵심 부품을 연결하는 것은 '시스템 버스'다.
컴퓨터는 비트(0과 1 → 이진법)로 정보를 이해할 수 있다.
이진법은 2의 보수(보충수)로써 음수를 표현할 수 있다.
십육진법을 통해 이진법보다 짧은 숫자를 표현할 수 있다.
십육진법은 0~9와 A~F를 통해서 표현할 수 있다.
컴퓨터가 인식하는 문자 집합에서, 문자와 숫자로 전환하는 문자 인코딩/디코딩 과정이 필요하다.
한글 인코딩에는 완성된 글자를 표현하는 완성형 인코딩 방식인 EUC-KR과 초성, 중성, 종성 코드의 조합으로 하나의 글자를 만드는 조합형 인코딩 방식이 있다.
하지만 모든 한국어를 표현할 수 없다는 한계로, 전 세계 모든 문자를 표현할 수 있는 통일된 방식인 유니코드(UTF-8)를 사용한다.
(+ 운영체제에 따른 차이로, 윈도에서 맥으로 넘어가고 나서 한글이 깨지거나, 자모가 초중종성이 풀리는 현상이 가끔 발생한다.)
명령어는 인간이 이해할 수 있는 고급 언어에서 컴퓨터가 직접 이해할 수 있는 저급언어로 변환된다.
저급언어에는 명령어 비트(0과 1)로 이루어진 기계어와, 기계어를 읽기 편한 형태로 번역한 어셈블리어가 있다.
(+ 내가 좋아하는 게임인 롤러코스터 타이쿤이 어셈블리어로 개발했다는 사실에 경악을 금치 못했다. 그 복잡한 게임을?)
고급언어에는 소스 코드 전체가 저급언어로 변환되는 컴파일 언어와 한 줄씩 실행되는 인터프리터 언어가 있다. 다만, 두 언어의 경계는 명확지 않을 수 있다.
연산 코드는 명령어가 수행할 연산, 오퍼랜드는 연산에 사용할 데이터(또는 그 위치)다.
주소 지정 방식을 통해 연산에 사용할 데이터(= 유효 주소) 위치를 찾는다.
주소 지정 방식에는 즉시/직접/간접/레지스터/레지스터 간접 주소 방식이 있다.