2022. 1. 18. 02:53ㆍCS
1. 언어란 무엇인가
모든 언어의 뜻은 기호의 집합으로 인코딩(encoding) 된다.
(1) 인코딩이란?
문자 인코딩(영어: character encoding) 또는 텍스트 인코딩(text encoding)[1] 또는 줄여서 인코딩은 사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것을 말한다. 넓은 의미의 컴퓨터는 이러한 신호를 입력받고 처리하는 기계를 뜻하며, 신호 처리 시스템을 통해 이렇게 처리된 정보를 사용자가 이해할 수 있게 된다.
하지만 의미를 기호로 인코딩하는 것만으로는 충분하지 않다. 언어가 제대로 작동하려면 의사소통하는 당사자들이 모두 같은 문맥(context)을 공유해서 같은 기호에 같은 뜻을 부여할 수 있어야 한다.
(2) 문맥이란?
어떤 주어진 언어표현이 나타나는 부분과 연관이 되는 언어적인 맥락이라고 할 수 있다.
언어표현은 흔히 중의성(重義性)을 지니게 되어 문맥을 떠나서는 어떤 뜻으로 썼는지 알 수 없는 경우가 있다. 언어내적인 맥락, 즉 문맥이나 언어외적인 맥락, 즉 발화상황이 중의성을 해소하는 데 중요한 구실을 한다. 이를테면, “저 다리는 아름답다.”라고만 하면 어떠한 다리를 뜻하는지 모르나 말하는 이가 동작대교를 손가락으로 가리키며 “저 다리는 아름답다.”라고 말하는 맥락에서는 그 뜻이 분명해진다.
[출처: 한국민족문화대백과사전(문맥(文脈))]
이처럼 다리라는 동일한 기호를 구분할 수 있는 요소는 문맥뿐인데, 언제나 문맥을 명확히 식별할 수 있는 것은 아니다. 컴퓨터 언어에도 마찬가지 문제가 있다.
2. 문자언어
문자 언어는 기호를 나열한 것이다. 기호를 정해진 순서대로 나열하면 단어를 만들 수 있으며, 언어마다 기호와 기호 유형이 달라질 수 있다. 또 언어마다 순서도 다를 수 있고, 기호의 순서도 중요하다.
1) 기호가 들어갈 상자
2) 상자에 들어갈 기호
3) 상자의 순서
위 세가지 구성요소가 문자 언어의 틀을 이루는데, 컴퓨터 언어에서도 마찬가지다.
일부 언어에는 주변의 상자안에 들어 있는 기호의 종류에 따라 상자에 들어갈 수 있는 기호를 제한하는 복잡한 규칙이 존재하기도 한다.
3. 비트
자연어에서는 이 상자를 문자(character)라고 부르고 컴퓨터에서는 비트(bit)라고 부른다.
도대체 컴퓨터는 어떻게 이런 방대한 데이터들을 이렇게 빠르면서도 효율적으로 처리를 할 수 있는 걸까? 사실 컴퓨터가 이해할 수 있는 최소의 정보 단위는 0 과 1 이다. 컴퓨터는 이렇게 0과 1로 이루어진 정보들을 처리하는데 컴퓨터가 처리할 수 있는 가장 작은 단위의 정보를 나타내는 것이 바로 비트이다.
비트는 0또는 1이라는 정보를 상자에 담을 수 있는데 신호가 없고,있고 불이 꺼지고,켜지고 이런 기본적인 정보들만 처리할 수 있다.
1 bit = 0, 1 총 2가지를 담을 수 있다.
2 bit = 2 x 2 = 총 4가지를 담을 수 있다.
3 bit = 2 x 2 x 2 = 총 8가지를 담을 수 있다.
8 bit = 2x2x2x2x2x2x2x2 = 256개의 다른 정보를 나타낼 수 있다.
이 8 bits가 바로 프로그래밍에서 컴퓨터가 데이터를 처리할 때 가장 기본적인 단위를 1byte라고 한다.
4. 논리 연산
그럼 컴퓨터는 이러한 비트를 가지고 무엇을 표현할 수 있을까?
대표적인 경우는 예(True)/아니오(False)로 대답할 수 있는 논리 연산(logic operation)이 있다.
(1) 불리언 대수
논리 연산자로는 불 대수(Boolean algebra)가 있는데
불 대수란 0과 1, 즉 어떠한 명제에 대해 참과 거짓을 비트에 적용시킬 수 있는 집합을 의미한다.
NOT | 논리적 반대를 의미한다. | a = True; NOT a = False |
AND | 두 개 비트가 둘 다 참일 경우에 참. | a, b = True; a AND b = True |
OR | 두 개의 비트 중 하나만 참이어도 참. | a = True, b = False; a OR b = True; |
XOR | eXclusive OR(배타적 or); 둘 다 참이 면 거짓. 둘 중 어느 하나 만 참이어야 한다. | a = True, b = True; a XOR b = False |
부울 대수(Boolean Algebra)라고도 불리는 논리 연산의 기본 개념은 19세기 중반 영국의 수학자 조지 부울이 창안했다고 한다.
조지 불
두 개의 상태(True - 1, False - 0)를 갖고 연산을 수행하기때문에 컴퓨터 과학에서는 빼놓을 수 없는 주제이며 프로그래밍에선 IF문, FOR - EACH, WHILE 등 정말 이거 없이 프로그래밍을 어떻게 하나 싶을 정도로 폭넓게 사용되고 있다.
논리 게이트?
논리 게이트는 하나 또는 그 이상의 입력신호로부터 하나의 출력값을 발생시키도록 구성된 전자 회로다. 전자 회로는 두 개의 구분되는 전기적 신호에 따라 작동하도록 설계되고, 논리 - 1, 논리 - 0 과 같은 이진 변수로 표현할 수 있는 구분된 응답을 되돌려주게 된다.
허용된 범위 내의 전기적 신호가 회로에 들어오면, 그 범위를 판단하여 정해진 전기 신호를 출력하는 것이다.
진리표
논리 연산의 가능한 결과값을 표에 모두 나타낸 것을 진리표라고 한다. 논리 연산의 결과가 혼동되거나 뭔가 이해가 안된다 싶으면 그려보는 것이 좋다.
A AND B 논리연산
AB결과값
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
논리 연산의 종류
크게 7가지의 종류가 있다.
부정(NOT)
'논리적 반대'를 의미한다.
입력값결과값
0 | 1 |
1 | 0 |
거짓인 비트에 NOT을 하면 참이 되고 참인 비트에 NOT을 하면 거짓이 된다.
논리곱(AND)
주로 & 기호를 사용한다. 두 명제가 모두 참이여야 참이 되는 연산이다.
입력값결과값
0 , 0 | 0 |
0 , 1 | 0 |
1 , 0 | 0 |
1 , 1 | 1 |
논리합(OR)
주로 | 기호를 사용한다. 두 명제 중 하나만 참이라도 참이 되는 연산이다.
입력값결과값
0 , 0 | 0 |
0 , 1 | 1 |
1 , 0 | 1 |
1 , 1 | 1 |
부정 논리곱(NAND)
Not AND 라고 한다. 논리곱의 결과를 한 번 부정(NOT)한 것이다.
두 명제가 모두 참이면 거짓, 이외에는 모두 참이다. 논리곱의 경우 두 명제가 모두 참일때만 참을 돌려주므로 이를 부정하니 당연한 결과이다. 낸드 메모리는 진짜 NAND 회로로 만드는 것이라고 한다.
입력값결과값
0 , 0 | 1 |
0 , 1 | 1 |
1 , 0 | 1 |
1 , 1 | 0 |
부정 논리합(NOR)
Not OR 이다. 논리합의 결과를 부정한 것이다. 두 명제가 모두 거짓이어야 참, 이외엔 모두 거짓.
입력값결과값
0 , 0 | 1 |
0 , 1 | 0 |
1 , 0 | 0 |
1 , 1 | 0 |
배타적 논리합(XOR), 동치(EQV)
XOR
두 명제 중 하나만 참이거나, 두 명제의 참거짓이 다를때 참이다. 암호화 기법으로도 많이 사용된다고 한다.
입력값결과값
0 , 0 | 0 |
0 , 1 | 1 |
1 , 0 | 1 |
1 , 1 | 0 |
EQV
두 명제가 같은 값을 가지면 참, 아니면 거짓. 배타적 논리곱이라고도 한다.
입력값결과값
0 , 0 | 1 |
0 , 1 | 0 |
1 , 0 | 0 |
1 , 1 | 1 |
(2) 드모르간의 법칙
1800년대 영국 수학자 오거스터스 드 모르간은 불리언 대수에 적용할 수 있는 법칙을 추가로 알아냈다. 이 법칙은 발명자의 이름을 따서 드 모르간의 법칙이라고 한다.
이 법칙은 a AND b라는 연산은 NOT(NOT a or NOT b)와 같다고 말한다.
a AND b | NOT( NOT a OR NOT b) |
F | F |
F | F |
F | F |
T | T |
이렇게 NOT을 충분히 사용하면 AND 연산을 OR 연산으로 대신할 수 있다. (그리고 역으로 OR을 AND로 대신할 수 있다)는 뜻이다. 컴퓨터에서 입력을 항상 원하는 형태로 얻을 수만은 없기 때문에 이런 성질이 유용할 때가 있다. 연산을 최소로 사용하면 비용을 최소화 할 수 있다. 또 연산을 연쇄적으로 사용하면 계산이 느려진다.
결론은 드로므르간의 법칙을 알면 훨씬 간단하게 결과를 계산할 수 있게되는 것이다.
'CS' 카테고리의 다른 글
CS : 데이터 구조와 처리 (0) | 2022.02.15 |
---|---|
CS : 네트워킹 (0) | 2022.02.08 |
CS : 컴퓨터 아키텍쳐와 운영체제 (0) | 2022.02.04 |
CS : 메모리와 디스크의 핵심 : 순차논리 (0) | 2022.01.28 |
CS : 문자를 사용한 수 표현, 색을 표현하는 방법 (0) | 2022.01.22 |