C언어 - 프로그래밍 언어의 문법

이미지
1. 언어의 문법 인간이 사용하는 언어에는 매우 다양한 문법 이 존재하며, 이를 익히는 데에는 많은 시간이 필요하다. 명사, 동사, 시제, 어순 등 매우 많은 문법을 익혀야 한다. 프로그래밍 언어는 컴퓨터에게 무엇을 어떻게 할지 지시하기 위한 명확한 목적을 가진 언어이다. 비교적 적은 수의 문법 요소만으로도 의미의 표현과 실행이 가능하다. 사람이 쓰는 언어와 달리 프로그래밍 언어는 몇 가지 핵심 문법 만 이해하면 바로 사용이 가능하다. 2. C언어 문법 프로그래밍 언어는 다음과 같이 다섯 가지로 구성되어 있다. 변수 - 값을 저장한다. 연산 - 값을 계산한다. 문장 - 내용을 실행한다. 제어 - 실행 순서를 변경한다. 함수 - 여러 문장을 하나로 묶는다. 이 다섯 가지만의 문법만 이해해도 프로그램의 기본 구조를 이해할 수 있다. 2.1. 변수 (Variable) 변수는 값(value)을 저장하는 메모리 공간에 이름 을 부여한 것이다. 프로그램은 변수를 통해 데이터를 기억하고, 참조하고, 변경한다. 2.1.1. 변수 타입(Type) 변수 타입은 변수가 어떤 종류의 값을 저장 하며, 그 값을 어떻게 해석할지를 결정하는 규칙이다. 변수 타입에 의하여 저장 가능한 값의 형태, 메모리 사용 방식, 그리고 허용되는 연산의 종류가 결정된다. int count; count = count + 1 ; // int type stores integer values.   char grade = 'A' ; // char type stores a single character or small integer values.   float ratio = 0.75f ; ratio = ratio * 100.0f ; // float type stores floating-point (real) values. 2.1.2. 상수 상수는 값이 바뀌지 않는 변수 이다. C언어에...

게이트 회로로 이해하는 컴퓨터 연산

1. Computer

  • 영화 "히든 피겨스(Hidden Figures, 2016)"는 NASA의 우주 개발 프로젝트를 성공으로 이끈 숨겨진 흑인 여성 계산원의 실화를 다룬 영화이다.
    • 이 영화 속에서 계산원들의 직함은 "computer"이다.
  • 컴퓨터(computer)는 계산을 하는 기계이다. 그런데 어떻게 계산을 수행하는 것일까?
    • 컴퓨터는 수 많은 트랜지스터로 구성된 "Gate Circuit"을 이용하여 논리 연산과 산술 연산을 수행한다.

2. 연산 (Operation)

2.1. Basic

  • 전류가 흐르면(ON) 전구가 켜지고, 흐르지 않으면(OFF) 꺼진다.
※ 전류를 흐르게 만드는 전자는 실제 물리적으로는 (–)에서 (+)로 이동한다. 그러나 전자의 존재를 알지 못했던 당시, 프랭클린이 ‘전하가 (+)에서 (–)로 움직인다’고 정의한 규칙이 오랫동안 사용되면서, 오늘날에도 전류의 방향은 관례적으로 (+)에서 (–)로 흐르는 것으로 표현한다.

2.2. Transistor

  • 그런데, 반도체(Semiconductor)라는 것은 전기를 흐르게도 할 수 있고, 흐르지 않게도 할 수 있다.
  • 대표적으로 트랜지스터(Transistor)는 이러한 반도체의 특성을 이용하여 전류의 흐름을 제어할수 있다.

2.3. Gate

  • 트랜지스터(Transistor)를 이용하여 기본 AND, OR, NOT, NOR, XOR 연산을 구현할 수 있다.
  • 이것을 Gate Circuit라고 하며, 이러한 여러 게이트를 조합하여 복잡한 디지털 논리 회로(Circuit)를 구성한다.

👉 circuitjs-gate

2.3.1. AND Gate

  • X, Y가 모두 ON 일때 ON


2.3.2. OR Gate

  • X, Y 중 하나라도 ON 일때 ON

2.3.3. NOT Gate

  • X가 OFF 일때 ON

2.3.4. NOR Gate

  • X, Y가 모두 OFF 일때 ON


2.3.5. XOR Gate

  • X, Y가 다를때 ON


3. 가산기 (Adder)

  • 가산기는 더하기를 수행하는 회로(Circuit)이다.
  • 컴퓨터의 CPU는 수많은 가산기를 기반으로 구현되어 있으며, 모든 연산의 기본이 된다.
    • 곱셈은 더하기를 여러 번 반복한 것이고, 뺄셈은 보수(complement)를 이용한 덧셈으로 처리되며, 나눗셈은 뺄셈을 반복하여 수행된다.

[출처] Intel - The Transistor, Explained

※ 보수(補數, complement): 수학적으로 기준값에서 모자란 만큼 채워주는 수를 말한다.

  • 컴퓨터에서는 뺄셈을 더하기로 바꾸기 위해 보수를 사용한다. 즉, 뺄셈 A - B 를 덧셈 A + (B의 2의 보수) 로 바꾸어 계산한다.
    • 1의 보수 (One’s complement): 비트를 뒤집은 값
    • 2의 보수 (Two’s complement): 1의 보수 +1을 더한 값

5 - 3 = ?

※ 0011 (3) → 1100 (3의 1의 보수) → 1101 (3의 2의 보수)
0101 (5) + 1101 (3의 2의 보수) ------- 10010 ∴ 5bit 중 맨 앞(overflow) 1bit 버림 → 0010 (2)

3.1. 반가산기 (Half Adder)

  • 2 개의 bit를 더하는 회로

3.2. 전가산기 (Full Adder)

  • 3 개의 bit를 더하는 회로

3.3. 가산기 예제

  10 (2)
+ 11 (3)
------
 101 (5)

👉 circuitjs-adder

3.3.1. 첫 번째 자리

Half Adder

A(0), B(1)  →  S=1, C=0

📟 1

3.3.2. 두 번째 자리

Full Adder

A(1), B(1), C(0)  →  S=0, C=1

📟 0

3.3.3. 세 번째 자리

Full Adder

A(0), B(0), C(1)  →  S=1, C=0

📟 1

3.3.4. 결과

1 0 1

이 블로그의 인기 게시물

실행 파일은 파일은 어떻게 동작하는가

C언어 - 프로그래밍 언어의 문법