일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- OculusMotionVectorPass
- 개인 바이트
- Private Bytes
- 메모리 누수
- 가상 바이트
- AppSW
- Windows Build
- Cell Look
- Cell Shader
- 게임 수학
- 작업 집합
- C언어
- VR
- 벡터
- ASW(Application SpaceWarp)
- 3d
- URP
- 프로그래밍 기초
- Specular
- Virtual Byte
- Toon Shader
- Cartoon Rendering
- Rim Light
- URP로 변경
- Three(Two) Tone Shading
- ColorGradingLutPass
- working set
- Today
- Total
WinCNT
컴퓨터 개론 - 컴퓨터는 어떻게 판단하는가? 본문
컴퓨터는 전류가 흐른다(0) / 전류가 흐르지 않는다(1)는 알게 되었다
그런데 0과 1이라는 2가지 상태는 이 세상의 것들을 판단하고 표현하기에는 충분치 않다
하지만 다행히 0과 1만으로 형식화한 대수 체계인 불 대수(Boolean algebra)가 이미 존재하고 있었으며
컴퓨터는 이를 논리 회로(Logic Gate)를 통해 구현하여 전기적 신호를 판별할 수 있게 되었다
불 대수(Boolean algebra)
불 대수(Boolean algebra)란?
19세기 중반 영국의 수학자 조지 불(George Boole)이 고안하고 형식화한 대수 체계를 의미합니다.
불 대수에서는 어떤 명제의 참과 거짓을 이진수 1과 0에 대응시켜서 명제간의 관계를 수학적으로 표현합니다.
by 위키백과
불 대수에서는 우리가 집합을 배울 때 보았던 AND, OR 등이 +나 -와 같은 연산자로 사용된다
예를 들어 A와 B의 명제에 대한 AND라는 연산자의 논리 연산은 다음과 같다
- A AND B
A B 반환값 거짓(0) 거짓(0) 거짓(0) 거짓(0) 참(1) 거짓(0) 참(1) 거짓(0) 거짓(0) 참(1) 참(1) 참(1)
컴퓨터는 위와 같은 연산을 논리 회로(Logic Gate)를 통해 하게 된다
논리 회로(Logic Gate)
논리 회로(Logic Gate)란?
불 대수를 전자 회로라는 물리적 장치에 구현한 것이다
하나 이상의 논리적 입력 값에 대해 논리 연산을 수행하여, 하나의 논리적 출력 값을 얻는다
AND, OR, NOT 등의 기본 불 대수를 수행하며, 이러한 불 대수의 결합으로 복합적인 논리 기능을 수행한다
전에도 나왔지만 데이터란 0과 1(bit)의 상태라고 할 수 있습니다. 이는 주로 메모리에 유지되고 있다
그리고 메모리에 유지되고 있는 0과 1(bit)의 상태를 바꾸는 것이 CPU의 역할이며,
이는 논리 회로를 통해 수행하게 된다
(복잡한 판단을 위해서는 여러 논리 회로를 결합해야 하지만...)
논리 연산의 가장 기본이 되는 연산자는 AND, OR, NOT이 있으며, 이는 보통 다음과 같은 기호로 표시한다
그 외에도 다음과 같은 논리 회로가 존재한다
반가산기(Half Adder)에 대해서
반가산기(Half Adder)란?
이진수의 한자리수를 연산하고, 받아올림수는 받아올림수 출력(carry out)에 따라 출력하는 가산기
AND, OR, NOT의 세 가지 종류의 논리회로만으로 구성할 수 있다
by 위키백과
컴퓨터의 덧셈에 있어서 가장 기본이 되는 것이 바로 반가산기(Half Adder)
반가산기는 오직 한자리수를 계산할 수 있다
십진수로 예를 들면, 7 + 5와 같은 계산을 수행한다는 것
반가산기의 경우, 계산 결과는 S에 출력하며 자리올림(Carry)가 발생하였을 경우는 C에 1를 출력하며,
최종값은 2C+S과 같다(C는 자리올림, 즉 2의 자리이기 때문에 2를 곱하는 값과 같기 때문)
전가산기(Full Adder)에 대해서
전가산기(Full Adder)란?
이진수의 한 자릿수를 연산하고, 하위의 자리올림수 입력을 포함하여 출력하는 가산기
하위의 받아올림수 출력을 상위의 받아올림수 입력에 연결함으로써 임의의 자리수의 이진수 덧셈이 가능하다
하나의 전가산기는 두개의 반가산기와 하나의 OR로 구성된다
이러한 전가산기를 여러 개 결합함으로써 드디어 2진수끼리의 덧셈이 가능해진다
컴퓨터에서의 음수 표현
우리는 마이너스 부호(-)를 이용하여 간단히 음수를 표현한다
예를 들어 10의 음수는 -10으로 간단히 표현할 수 있음
그렇다면 컴퓨터에서는 어떻게 음수를 표현해야 할까?
아쉽게도 컴퓨터는 0과 1만 있을 뿐이라 마이너스 부호를 사용할 수는 없다
따라서 음수를 고안하기 위해 다음과 같은 방법들이 고안되었다
- 부호화 절대치 방법(Signed Magnitude)
- 부호 비트를 제외한 수를 양수로 읽고, 마이너스를 붙이는 방법
- 1의 보수 방법(1's Complement)
- 총 n개의 비트로 정수를 표현할 때, 모든 n비트가 1로 이루어진 수에서 표현하고 싶은 음수의 절댓값을 뺀 수가 바로 1의 보수 방법으로 표현한 음수
- 결과적으로 어떤 음수를 1의 보수 방법으로 표현하고 싶다면 그 음수의 절대값의 모든 비트 숫자들을 반전시키면 된다.(0 은 1로 반전, 1은 0으로 반전)
- 2의 보수 방법(2's Complement)
- 총 n개의 비트로 정수를 표현할 때, 2^n = 1000...0에서 표현하고 싶은 음수의 절댓값을 뺀 수가 바로 2의 보수 방법으로 표현한 음수
- 결과적으로 어떤 음수를 2의 보수 방법으로 표현하고 싶다면 그 음수의 절대값의 모든 비트 숫자들을 반전시킨 후에(0 은 1로 반전, 1은 0으로 반전) 1을 더하면 된다. 즉, 1의 보수 방법 + 1 = 2의 보수 방법
여기서 주의해야 할 것은 보수의 개념과 보수 방법의 개념이 같지 않다는 것이다
편의상 2의 보수 방법를 2의 보수로 줄여서 말하는 경우가 많지만
실제로 보수는 더해서 어떠한 수가 되기 위한 수를 의미한다
(예를 들어 3에 대한 10의 보수는 7, 5에 대한 15의 보수는 10이라고 하는 것처럼)
음수 표현에서의 보수 방법은 각 자리의 비트에 대한 것으로 이해하시면 될 것 같다...
일반적으로 컴퓨터에서는 보통 2의 보수 방법 음수를 표현하고 있다
(부동 소수점의 음수 표현에는 부호화 절대치 방법을 사용하기도 하지만)
1의 보수 방법은 +0, -0이 동시에 표현된다는 문제점과,
최상위 비트에서 받아올림(Carry)이 발생(end around carry)하면 계산이 귀찮아지기 때문임
음수 표현을 고려한 감가산기의 추상화는 다음과 같다
산술 논리 장치(ALU)
산술 연산과 논리 연산을 하는 디지털 회로이다
논리 회로를 조합해서 산술 연산을 할 수 있다
참고 사이트
https://st-lab.tistory.com/189
https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90
https://docs.microsoft.com/en-us/cpp/c-language/c-operators?view=msvc-160
http://tcpschool.com/cpp/cpp_operator_arithmetic
SSS
'게임 프로그래밍(학습 내용 정리) > 컴퓨터 개론' 카테고리의 다른 글
프로그램이란 무엇인가 (0) | 2021.10.18 |
---|---|
컴퓨터 개론 - 마이크로 아키텍처 (0) | 2021.10.12 |
컴퓨터 개론 - 메모리 (0) | 2021.10.12 |
자료와 정보 (0) | 2021.10.08 |
컴퓨터 개론 - 1강. 컴퓨터는 어떻게 동작하는가? (0) | 2021.10.04 |