[C 공부] 3강 — C프로그래밍 입문

자료형, 변수, 보수의 개념

FlyingSquirrel
4 min readOct 6, 2019

이 포스트는 널널한 개발자님(최호성 분)의 “독하게 시작하는 C 프로그래밍” 강의를 보며 남긴 글입니다.
(👉 독하게 시작하는 C 프로그래밍 강의)

자료형

  • 자료형은 일정 길이의 메모리에 저장된 정보를 해석하는 방법이다.
  • 자료라는 것은 숫자인건데, 숫자는 전기적 신호형태로 존재한다. 메모리에 이 숫자를 보관하게 되는데, 보관하면 꺼내 쓰기도 해야하니까 그 정보(숫자)에 관리 차원에서 번호(주소)를 붙인다. 그 번호(주소)는 16진수로 0x00000000 되어있다. 1 byte === 8bits 인데, 8bits는 영문 1글자를 저장할 수 있는 공간이다. 영문 1글자마다 주소를 부여하는 것이다.
  • 32bits-application라고 하는 것은 메모리를 통제하는 최대범위가 4GB로 제한된다는 뜻이다. 만약 내 OS가 Window 32bit라면 메모리(램)는 4GB까지 인식할 수 있다. 64bits라면 아주 큰 숫자(16EB — 엑사바이트라고 읽음)까지 램을 인식할 수 있다. 참고로 큰 메모리는 TB(테라바이트) > PB(페타) > EB(엑사) > ZB(제타) > YB(요타)이런 순으로 간다.
  • 4bits로 정보를 표현한다고 한다면 2⁴로 16가지의 경우의 수가 있기 때문에 0~2⁴(15)까지 표현이 된다.

변수, 상수, 부호체계(ASCII)

  • 변수는 그 값이 변경될 수 있는 수이다. 아직 확정되지 않은 숫자가 변수이다.
  • 변수는 이름(식별자)으로 식별한다. 변수는 선언하고 사용해야하는데 선언할 때 반드시 이름(식별자)을 부여해야한다.
변수를 선언하는 방법자료형 변수이름 = 초깃값; << 이런 순으로 쓴다.
int nData = 10; <<<<<<< 예시
  • 상수는 확정된 수이다.
  • C언어에서 변수는 메모리로 구현되고, 메모리는 주소를 가진다.
  • 부호체계(예. 은 3으로 한다. 는 7로 한다.는 약속)는 정하기 나름이라 회사마다 다른 부호체계를 갖게 됐다. 그래서 미국표준협회에서 체계를 통일했고, 그게 ASCII(아스키)가 나왔다. 원래는 7bits 체계여서 영문,대소문자, 숫자를 커버할 수 있게 됐다. 그런데 기호 같은 특수문자(◇이런것)를 표현하기 위해서 이 7bits에 1bit를 추가해서 최종적으로 ASCII는 8bits 체계가 됐다.

컴퓨터가 뺄셈을 하는 방법(보수의 개념)

  • 우리는 6–1(6 빼기 1)을 할 때 빼기를 생각하지만, 컴퓨터는 보수를 더하는 방법으로 빼기를 계산한다. 6 빼기 1에서 1에 대한 2의 보수를 6에 더하는 방식으로 계산한다.
(사람이 생각하는 방식)
6 - 1 = ? (6에서 1을 뺀다.)
(컴퓨터가 생각하는 방식)
6 + (1에 대한 2의 보수) = ? (6에다가 1에 대한 2의 보수를 더한다)
  • 1의 보수는 2진수의 각 자리에 대하여 0은 1로, 1은 0으로 바꾼 수이다.
    (참고 Youtube동영상: 👉1의 보수와 2의 보수)
  • 2의 보수는 1의 보수보다 1만큼 큰 수를 말한다.
---- Step 1. ----
6-1(6 빼기 1)을 한다면...
(ㄱ) 10진수 6은 2진수로는 0110
(ㄴ) 10진수 1은 2진수로는 0001
(ㄴ)을 표현할 때 -1로 생각하는 것이 아니고, 보수의 개념으로 계산한다. 보수를 계산할 때는 Step2와 같이 계산한다.
---- Step 2. ----
첫 번째, (ㄴ)의 1의 보수를 구한다. -> 1110
두 번째, 1의 보수의 맨 마지막 자리에 + 1을 한다. -> 1110 + 0001 = 1111
따라서, (ㄴ)의 '2의 보수' 값은 1111이다.
---- Step 3. ----
이제 (ㄱ)에다가 Step2에서 구한 (ㄴ)의 '2의 보수'인(1111)을 더한다.
0110
+1111
-------
10101
여기서 맨 앞에 있는 1을 무시하고, 나머지(0101)가 6-1의 값이다. 2진수 0101은 10진수로 5이다.

signed와 unsigned

  • Step 2에서 구했던 2진수 1111은 12의 보수 로서 -1로 볼 수도 있고, 2진수 그대로 15라고 볼 수도 있다.(15를 2진수로 표현하면 1111이다)
  • 자료형이라는 것은 어떻게 해석하느냐에 따라서 이거 -1로 볼 수도 있게 되고, 15로 볼 수 있게 되게 된다. -1로 읽게 되는 것은 부호가 있으니까 signed라고 쓰고, 15라고 읽게되는 것은 부호가 없으니까 unsigned라고 쓰게 된다.
  • int a; 라는 변수를 정의할 때 원래는 singed int a; 라고 정의해야한다. 그런데 보통 signed 를 생략한다. 특별히 unsigned 일 때만 unsigned int 1; 라고 쓴다.

--

--

FlyingSquirrel
FlyingSquirrel

Written by FlyingSquirrel

감성이 말랑말랑한 개발자입니다.

No responses yet