728x90
- 본 글은 [한 권으로 읽는 컴퓨터 구조와 프로그래밍] 책을 읽고 정리한 내용입니다.
- 프로그래머는 컴퓨터에게 명령을 내려야 하는데 컴퓨터가 사람의 말을 알아듣지 못하기 때문에 사람이 컴퓨터의 말을 배워야 한다.
- 컴퓨터 언어는 자연어(사람이 쓰는 언어)가 생긴 후에 만들어진 인공적인 발명품이기 때문에 자연어를 사용하여 컴퓨터 언어를 설명할 수 있다.
- 컴퓨터 언어는 문자 언어만을 사용하는데 쓰이는 기호, 기호 나열 방법, 사용법 등의 요소를 자연어와 공유한다.
- 자연어와 컴퓨터 언어의 비문자 언어는 공유하지 않는다.
언어란?
- 언어는 편의성을 제공하는 지름길이다.
- 언어를 사용하면 복잡한 개념을 아주 멀리까지 전달할 수 있으며, 직접 보여주지 않고도 의사소통이 가능하다.
- 전달 과정에서 중재자가 존재할 수도 있다.
- 구어, 문어, 몸짓 언어 등을 포함하는 모든 언어들의 뜻은 기호의 집합으로 인코딩되지만 이것만으로 의미를 전달하기에는 충분하지 않다.
- 언어가 제대로 작동하기 위해서는 의사소통에 참가하는 사람들이 모두 같은 문맥을 공유하여 하나의 기호에 같은 뜻을 부여해야 한다.
- ex) 토토 : [오즈의 마법사]의 개 or 일본 기업
- ex) 캐미솔 : 미국 - 여성용 민소매 속옷 or 프랑스 - 구속복
문자 언어
- 문자 언어는 기호를 나열한 것으로 이 기호를 정해진 순서대로 나열하여 단어를 만든다.
- ex) 맛집 : ㅁ, ㅏ, ㅅ, ㅈ, ㅣ, ㅂ (여섯 가지 기호)
- ex) yum : y, u, m (3가지 기호)
- 기호와 조합에는 많은 가능성이 있는데 현대 한글은 24자의 기본 자모음, 영어는 기본 26자의 기호를 사용하며 언어마다 기호와 기호의 유형이 서로 달라질 수 있다.
- ex) 한자 : 각 기호가 모두 다른 뜻을 나타내는 표의문자
- 언어의 순서나 기호의 순서도 다르다
- ex) 히브리어 : 오른쪽에서 왼쪽, 중국어 : 세로로 읽음 (언어의 순서)
- ex ) dog 와 god 은 같지 않다. (기호의 순서)
- 문자 언어의 틀
- 기호가 들어갈 상자
- 상자에 들어갈 기호
- 상자의 순서
- 일부 언어에는 서로 인접한 상자에는 특정한 기호가 들어갈 수 없는 등의 복잡한 규칙이 존재한다.
비트
- 자연어의 문자 (character) = 컴퓨터의 비트(bit) -> 상자
- 비트 : 바이너리 (2진법) + 디지트 (숫자)
- 비트를 사용하면 적은 비용으로 편리하게 기호를 담을 수 있다.
- 비트는 2진법을 사용하기 때문에 비트 상자에는 두 가지의 기호만 담을 수 있다.
- 기호의 개념은 추상적이고 무엇이든 상관없지만 말하는 사람과 듣는 사람이 같은 문맥으로 이해하지 않으면 제대로 작동할 수 없다
- ex) 말하는 사람 : U(점-점-선) <-> 듣는 사람 : 쌀-쌀-보리
논리 연산(logic operation)
- 비트 사용법 예
- 날씨가 추운가? 내 모자를 좋아하니? 같은 질문에 예/아니오 로 답을 하는 것
- 예 -> 참(true)
- 아니오 -> 거짓(false)
- 파티 장소는 어디? 라는 질문은 예/아니오 로 답할 수 없는 질문이기 때문에 한 비트로 표현할 수 없다.
- 날씨가 추운가? 내 모자를 좋아하니? 같은 질문에 예/아니오 로 답을 하는 것
- 논리연산은 다른 비트가 표현하는 내용으로부터 새로운 비트를 만들어 내는 동작이다.
- ex) 밖에 비가 내리고 있거나 추우면 코트를 입어라
- 춥다 or 비가 내린다가 '참'이면 코트 입는다 가 '참'이다.
- 눈이 오고, 학교에 가는 날이 아니라면 스키를 타러 가라
- 눈이 온다 or 학교에 가는 날이 아니다가 '참'이면 스키를 탄다 가 '참'이다.
- ex) 밖에 비가 내리고 있거나 추우면 코트를 입어라
불리언 대수
- 영국 수학자 조지 불(George Boole)이 만들어낸 비트에 대해 사용할 수 있는 연산 규칙의 집합
- 대수 : 수에 대한 연산 규칙의 집합
- 결합 법칙, 교환 법칙, 분배 법칙을 적용할 수 있다.
- NOT
- '논리적 반대'를 의미하는 연산이다.
- 거짓 을 뜻하는 비트에 NOT 을 하면 참
- 참 을 뜻하는 비트에 NOT 을 하면 거짓
- '논리적 반대'를 의미하는 연산이다.
| A | NOT A |
| TRUE (1) | FALSE (0) |
| FALSE (0) | TRUE (1) |
- AND
- 둘 이상의 비트에 작용하며 모든 비트가 참일 때 결과가 참
- 2비트 연산 : 첫 번째 비트가 참이고 두 번째 비트가 참이면 결과는 참
- 더 많은 비트 연산 : 모든 비트가 참이면 참
- 둘 이상의 비트에 작용하며 모든 비트가 참일 때 결과가 참
| A | B | A AND B |
| TRUE (1) | TRUE (1) | TRUE (1) |
| TRUE (1) | FALSE (0) | FALSE (0) |
| FALSE (0) | TRUE (1) | FALSE (0) |
| FALSE (0) | FALSE (0) | FALSE (0) |
- or
- 둘 이상의 비트에 작용하며 한 비트라도 참이면 참
- 2비트 연산 : 첫 번째 비트가 참 이거나 두 번째 비트가 참이면 결과는 참
- 더 많은 비트 연산 : 하나라도 참이면 참
- 둘 이상의 비트에 작용하며 한 비트라도 참이면 참
| A | B | A OR B |
| TRUE (1) | TRUE (1) | TRUE (1) |
| TRUE (1) | FALSE (0) | TRUE (1) |
| FALSE (0) | TRUE (1) | TRUE (1) |
| FALSE (0) | FALSE (0) | FALSE (0) |
- xor
- 배타적(exclusive) or
- 첫 번째 비트와 두 번째 비트가 다른 값인 경우 참
- 두 값 중 어느 하나가 참이면 참
- 두 값이 모두 참이면 거짓
| A | B | A XOR B |
| TRUE (1) | TRUE (1) | FALSE (0) |
| TRUE (1) | FALSE (0) | TRUE (1) |
| FALSE (0) | TRUE (1) | TRUE (1) |
| FALSE (0) | FALSE (0) | FALSE (0) |
- 기본 불리언 연산을 다양하게 조합하여 같은 결과를 얻을 수도 있다.
- A XOR B 연산은 (A OR B) AND (A AND B) 와 같다
드모르간의 법칙
- 영국 수학자인 오거스터스 드모르간(Augustus De Morgan) 이 알아낸 불리언 대수에 적용할 수 있는 법칙
- A AND B = NOT(NOT A OR NOT B)
| A | B | A AND B | NOT A | NOT B | NOT A OR NOT B | NOT(NOT A OR NOT B) |
| TRUE (1) | TRUE (1) | TRUE (1) | FALSE (0) | FALSE (0) | FALSE (0) | TRUE (1) |
| TRUE (1) | FALSE (0) | FALSE (0) | FALSE (0) | TRUE (1) | TRUE (1) | FALSE (0) |
| FALSE (0) | TRUE (1) | FALSE (0) | TRUE (1) | FALSE (0) | TRUE (1) | FALSE (0) |
| FALSE (0) | FALSE (0) | FALSE (0) | TRUE (1) | TRUE (1) | TRUE (1) | FALSE (0) |
- NOT 을 사용하면 AND 연산을 OR 연산으로 대신할 수 있다는 뜻이다.
- 입력이 '춥다' '비가온다' 형식이 아니라 'NOT 춥다' 'NOT 비가 온다'의 형식에서 유용할 수 있다.
- 자연어의 이중 부정이 비슷한 일을 한다.
- ex) 나는 사랑에 빠지지 않을 수 없었다.
- 긍정적인 논리 ( OR 연산 이용 )
| 춥다 | 비가 온다 | 코트를 입는다. |
| TRUE (1) | TRUE (1) | TRUE (1) |
| TRUE (1) | FALSE (0) | TRUE (1) |
| FALSE (0) | TRUE (1) | TRUE (1) |
| FALSE (0) | FALSE (0) | FALSE (0) |
- 부정적 논리 ( AND 연산 이용 )
| NOT 춥다 | NOT 비가 온다 | NOT 코트를 입는다 |
| TRUE (1) | TRUE (1) | TRUE (1) |
| TRUE (1) | FALSE (0) | FALSE (0) |
| FALSE (0) | TRUE (1) | FALSE (0) |
| FALSE (0) | FALSE (0) | FALSE (0) |
728x90
'Programming' 카테고리의 다른 글
| 정수를 비트로 표현하는 방법 (0) | 2021.12.24 |
|---|---|
| flag 값 알아보기 (0) | 2021.08.18 |
| depth 메뉴 구성 알아보기 (0) | 2021.08.17 |
| 어포던스(Affordance) 알아보기 (0) | 2021.08.15 |
| EP(Enterprise Portal) 알아보기 (0) | 2021.08.15 |