종제로
종제로 Devlog
종제로
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • C, C++ (22)
      • C, C++ (10)
      • Modern C++ (4)
      • 전문가를 위한 C++ (책) (8)
    • DirectX 자체엔진 개발 (8)
    • 자료구조 알고리즘 (10)
      • 공부 (9)
      • 문제풀이 (1)
    • 자기 계발 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DirectX11
  • 모두의C언어
  • 알고리즘
  • directX
  • c++ 17
  • C
  • c++ 11
  • 자료구조
  • 전문가를 위한 C++
  • C++

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
종제로

종제로 Devlog

C, C++/C, C++

[C] 모두의 C언어 복습&정리 (2)

2022. 1. 3. 07:19

1. 변수의 저장 범위

int는 정수를 저장하는 데 필요한 메모리 공간을 4바이트 사용한다. 컴퓨터는 모든 정보를 0과 1, 즉 2진수로 처리한다. 이때 0 또는 1을 저장할 수 있는 메모리 공간을 비트(bit)라고 한다. 비트는 컴퓨터가 정보를 저장하는 최소 공간으로, 8개의 비트가 모인 공간을 바이트(byte)라고 한다. 그러므로 4바이트는 32비트와 같다. 1비트로 표현 가능한 숫자는 0과 1 두 개 뿐이다. 2비트로 표현 가능한 숫자는 2진수 00, 01, 10, 11, 즉 10진수로 0, 1, 2, 3을 표현하고 저장할 수 있다. 그러므로 n비트로 저장 가능한 숫자의 범위는 0 ~ 2ⁿ(n은 비트의 개수) - 1까지 이다.

 

4바이트는 32비트이므로 양의 정수로만 표현할 수 있는 숫자는 4,294,967,296(=2³²)개 이다.

만약 변수가 저장할 수 있는 범위를 넘어서는 수를 저장하면 어떻게 될까? 이럴 경우 오버플로(overflow)가 발생했다고 한다. 예를 들어, 0~9까지만 저장할 수 있는 자료형이 있다고 가정해보자. 이 자료형에 10을 저장하려고 하면 오버플로가 발생하여, 10은 저장하지 못하고 다시 처음 숫자인 0으로 되돌아가 저장된다. 즉, 0->1->2->3->4->5->6->7->8->9->0->1...과 같이 숫자가 반복된다고 생각하면 된다.

 

char는 1바이트의 저장 공간이 할당된다. 1바이트는 8비트이므로 1바이트가 저장할 수 있는 숫자의 개수는 256이다. C언어에서는 1바이트를 사용하여 문자를 저장하므로, 표현할 수 있는 문자의 개수는 256개이다.

 

2. C언어의 함수

함수가 동작하는 원리는 간단하다. 함수를 호출하고 호출한 함수로 이동하여 함수에 정의된 동작을 수행하고, 완료 시 호출했던 곳으로 다시 넘어와서 순차적으로 작업을 수행하는 것이다.

 

구조적 프로그래밍을 하려면 프로그래밍 단위를 함수로 나눠서 처리하는 것이 효율적이다. 하지만 함수를 호출하고 수행하는 과정에서는 함수 호출 상태의 메모리 레지스터(register, CPU 내부에 있는 연산 가능한 메모리)를 저장하고 복구하는 실행 시간의 오버헤드(overhead, 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간이나 메모리)가 발생한다.

따라서 아주 간단한 일은 함수를 호출해서 수행하는 것보다 함수의 내용을 main() 함수에서 직접 수행하는 것이 실행 시간 관점에서는 더욱 효율적일 수 있다.

 

3. 반도체 회로 설계

컴퓨터, 핸드폰은 어떻게 만들까? 컴퓨터, 핸드폰, TV는 모두 디지털 회로 설계(digital circuit design)가 그 시작이라고 할 수 있다.

 

핸드폰은 특정 명령을 수행하는 기기이다. 특정 명령은 주로 디지털 신호로 전달되고, 디지털 신호는 우리가 배웠듯이 0과 1의 신호이다. 한마디로 특정 디지털 신호가 입력으로 들어오고, 출력으로 나가는 것이 디지털 회로이다. 우리 주변에 있는 다양한 전자 기계는 모두 디지털 회로로 구성되어 있다고 해도 과언이 아니다.

 

C언어 책에 이 이야기가 나온 이유는 우리가 사용하는 전자 기기와 제품들은 컴퓨터공학과 전자공학의 상호 연계에 의해서 이루어진 것이기 때문이다. 그러므로 조금 더 넓게 생각해서 다양한 학문과 연관되어있고, 특히 전자공학과는 아주 밀접한 관계에 있다는 것을 조금이나마 생각해보면 좋을 것 같다.

 

참고

  • 모두의 C언어 책

'C, C++ > C, C++' 카테고리의 다른 글

[C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역)  (0) 2022.01.30
[C] C언어에서 음수를 표현하는 방법  (0) 2022.01.07
컴파일(Compile) 과정  (0) 2022.01.05
[C] 모두의 C언어 복습&정리 (1)  (0) 2021.12.28
[C/C++] #include 시에 < > , " " 의 차이점  (0) 2021.12.27
    'C, C++/C, C++' 카테고리의 다른 글
    • [C] C언어에서 음수를 표현하는 방법
    • 컴파일(Compile) 과정
    • [C] 모두의 C언어 복습&정리 (1)
    • [C/C++] #include 시에 < > , " " 의 차이점
    종제로
    종제로

    티스토리툴바