[CS_study] 변수와 상수

나라리야·2021년 4월 21일
0

CS_study

목록 보기
2/18
post-thumbnail

변수와 상수 (Variable and Constant)


변수와 상수를 공부하기 전에 아래 C언어의 소스코드 내용을 먼저 이해해보자.

#include <stdio.h> 
int main(void) {
  printf("Hello World!");
  system("pause");
  return 0;
}
C/C++에서는 #include명령을 이용해 다양한 라이브러리를 불러올 수 있다. 
<stdio.h>는 여러 기본적인 기능을 담고 있다. 
C/C++ 프로그램은 항상 메인(main)함수로부터 시작된다. 
함수는 반환  (리턴 값)이 없을 수도 있으나 메인함수에서는 항상 0을 반환하는것이 일반적이다. 
특정한 문자를 출력하기 위해선 printf()함수를 사용한다. (printf()는 stdio.h에 포함되어있음)
하나의 명령어가 끝나면 세미콜론(;)을 붙입니다. 
C언어에서 system()함수를 이용해 운영체제의 기본적인 기능을 이용할 수 있다. 
명령 프롬프트에서 pause명령어는 키보드를 입력하기 전까지 대기하는 기능을 수행한다. 

변수와 상수의 개념

1) 변수는 변할 수 있는 데이터

2) 상수는 변하지 않는 데이터


변수의 선언

변수 선언 시 자료형과 변수명을 입력하고, 원하는 경우 초기값을 적용할 수 있다.

int a; <- 변수의 선언 
int a = 7; <-변수를 선언하고 초기값으로 7을 할당해주었다. 


#include <stdio.h>
int main(void) {
int a = 7;
printf("The number is %d.\n", a); system("pause");
return 0;
}

//출력값 : The number is 7. 

여기서잠깐! 초기화 되지 않은 변수는 쓰레기 값이 들어간다. 만약 a라는 변수에 값을 넣지 않는다면 빌드 오류가 발생하게 될 것이다. 하지만 아래 소스코드처럼 정적 변수로 선언된 것은 기본적으로 0으로 값이 초기화 되기 때문에 문제가 발생되지 않는다. 다만, 정적 변수가 아닌 수를 0으로 초기화 하려면 값을 일일이 넣어주어야 한다.

#include <stdio.h>

int a; //정적변수 선언

int main(void) {
printf("The number is %d.\n", a); system("pause");
return 0; //0으로 출력 
}

//출력값 : The number is 0.

기본 자료형 (꼭 외우기!)

식별자(Identifier)는 변수나 함수의 고유한 이름을 지정할 때 사용하는데,
이 때 C언어의 문법으로 정해진 예약어는 식별자로 사용할 수 없습니다.
예) string , for, void, bool, if, while, char, return, double

정수의 표현방법

1) 컴퓨터가 정수(Integer)를 처리하는 방법을 이해합니다.
2) 컴퓨터는 내부적으로 2진수로 숫자를 표현합니다. (0과 1)
3) 9는 다음과 같이 나타냅니다.(8비트안에 9를 표현한 것)

그렇다면 -9는 어떻게 표현할 수 있을까?
부호 절대값 방식 : 가장 왼쪽이 부호 자리가 0이면 양수 1이면 음수를 표현한다.

하지만 부호 절대값 방식은 다양한 값의 연산을 수행하기 적합하지 않다.

그래서 사용하는것이 2의 보수!
2의보수 = 1의보수+1 (모든 비트 뒤집기+1)
2의 보수를 이용하면 덧셈 연산만을 이용해서 양수와 음수를 연산할 수 있다.
이 때 올림 수가 발생가면 무시한다.
-9를 2의 보수로 표현한 아래 그림을 보자

아래 그림은 9-9=0 을 나타낸 것 이다.


실수의 표현 방법

1) 일반적으로 컴퓨터는 오차 없이 정확히 실수를 표현할 수 없다.
2) 따라서 넓은 범위의 실수를 표현하는 방식을 사용한다.
3) 컴퓨터는 실수를 표현할 때 부호, 지수, 유효숫자를 이용한다.
(−1)^s ∗ M ∗ 2^𝐸

아직은 부호,지수, 유효숫자로 나누어 사용한다 정도만 알고 있으면 된다.

결론!   변수는 변할 수 있는 데이터, 상수는 변할 수 없는 데이터 이고
컴퓨터가 정수를 표현할 때는 2의 보수방식을 이용한다!

profile
Code의 美를 추구하는 개발자 🪞

1개의 댓글

comment-user-thumbnail
2021년 7월 27일

이렇게 꾸준히 글 올리시는게 쉽지 않은데 대단하시네요...
저도 아는건 많이 없지만, 조금만 짚어 드리겠습니다.

  1. "만약 a 라는 변수에 값을 넣지 않는다면 빌드 오류가 발생하게 될 것이다."
    변수는 선언 시 쓰레기 값을 가지는 것은 맞지만, 빌드 중 오류가 발생하진 않습니다.

출처) The C Programming Language 2/E, 40pg.
External and static variables are initialized to zero by default. Automatic variables for which there is no explicit initializer have undefined (i.e. garbage) values.

  1. 식별자 (Identifier)
    C 키워드 중 stringbool 은 존재하지 않습니다. bool 은 C99 (ISO/IEC 9899) 에서 추가된 (stdbool.h) 헤더에 매크로로 정의되어 있긴 하지만 실제 keyword 명은 _Bool 입니다.

출처) C Programming: A Modern Approach 2/E, 26pg, 85pg.
The longstanding lack of a Boolean type has been remedied in C99, which provides the _Bool type.

CS 를 공부하는 것이 쉽진 않겠지만 응원하겠습니다.

문연수 올림.

답글 달기