공부/C++

깃 / 깃허브 / 포크 설명, 포크 사용 방법, 소스코드 구분 설명, 전처리기 설명, 형식 지정자(%), 변수, 연산자, 자료형, 비트와 바이트, 보수, 동적과 정적, 형변환, char형과 ASCII 코드

월러비 2025. 5. 29. 21:50

깃 / 깃허브 / 포크 설명

  • 버전관리 / 형상관리 툴이다.
  • 파일의 변경점들이 저장된다.
  • 목적 1 : 원한다면 이전 버전으로 돌아갈 수 있다.
  • 목적 2 : 협업을 관리할때 사용한다.

깃허브

  • 오픈소스의 모임이다.

포크 사용법

  1. 포크 실행
  2. 좌측 상단 File 클릭
  3. clone 클릭
  4. 깃허브에서 가져올 오픈 소스코드의 hrl을 복사한다.
  5. 생성할 클론을 저장할 경로를 지정 후 clone 버튼 클릭
  • 다른 레포지토리 여는법 ; file의 open repogitory 클릭 후 .git이 있는 폴더를 선택한다.
  • 주의) .git 폴더는 git사용에 필요한 데이터가 저장되어있어서 변경시키면 안된다.

C 시작

소스코드 구분 설명

프로젝트

  • 프로젝트 ; 소스코드들의 집합
  • 소스코드 추가 방법 ; 솔루션 우클릭 - 추가 - 새항목
  • main이 주 소스코드가 된다.
  • 필터 : 자동으로 파일을 확인해서 분류한다.
  • 단일(또는 단순) 프로젝트는 프로젝트 생성시 ‘디렉토리 하나로 합치는 옵션’을 체크하면 된다.

짧은 설명

  • 빌드할때 하는 일
    • 컴파일 실행 - 결과물 : 오브젝트 파일 생성
    • 링킹(소스코드들을 연결하는 작업) - 결과물 : 실행파일 생성
    • 즉, 전처리기는 컴파일 직전에 실행되는 작업이다.

전처리기

#include <cstdio>
  • 다른 파일의 내용을 소스 파일에 삽입할때 사용하는 명령어다.
  • # : 전처리기 , 처리하기 전에 하는 일
  • stdio : 헤더파일
  • <> : 기본 헤더파일의 경로를 쓴다. / "" : 프로그래머가 만든 헤더를 포함시킬때 사용한다. / 경로에는 실제 텍스트파일도 사용할 수 있다.
  • #include 사용 이유 : 너무 많은 파일을 사용하기때문에 헤더파일에 다른곳에 구현되어있는 기능의 정보를 넣어 가져오는 것이다.
  • 즉, 여러 함수들을 쓰기위해 미리 선언한 것이다. ex) cstdio -> printf
int main()
{
	코드
	
	return 0; //main 함수 한정으로 return은 안써도 된다.
}
  • 함수의 구현 - 최소 4개의 요소로 구현된다.
    • 반환형 - int
      • main의 형식은 int이기 때문에 return이 반환하는 값은 int - 정수형이어야한다.
    • 이름 - main
    • () - 매개변수, 인자, 파라미터, argument → 동일어
      • 즉, 함수 호출의 결과에 사용되는 ‘입력값’이다.
    • {} - 코드블럭 : 함수의 정의(내용)이 들어간다.
  • main - 빌드 후 실행파일이 만들어지면 ‘OS’가 실행한다.
    • 주의) 프로젝트 하나에 main 함수는 하나만 존재해야한다.

오류

  • 규칙에 안맞는 코드를 작성하면 빨간줄로 오류가 발생한다.
  • 선언 : 변수, 클래스, 함수, 구조체 등 선언을 안한다면 소스코드에서 사용할 수 없게된다. / 무조건 선언을 하고 사용하라는 뜻

출력 연습

printf("Hello World!"); //함수를 사용한 코드다. printf라는 함수
  • 함수 호출 문 이라고 부른다.
  • printf : cstdio에 포함된 함수 / 소괄호 안에 넘긴 문자를 콘솔창에 출력하는 함수
  • C언어 표준함수다.
  • 표준함수 : 기본기능으로 내장되어있는 함수
  • 그외 : 프로그래머가 직접 정의한 함수
printf("%d + %d = %d\\n", 2, 3, 2 + 3);
  • , : 구분하는 용도
  • (,int, int, int + int) : 변수와 수식으로 대체(변경, 교체)가 가능하다는 뜻이다.
  • 즉, 매개변수를 여러개 받아서 출력이 가능하다. -> 서식화된 출력 : 출력에 필요한 입력의 변경이 가능하다.
  • 문자열 : 문자 여러개가 합쳐진 형태 / 서식화된 문자열 -> %자료형 : 서식문자 라고 한다. / %d : 10진수의 정수형
  • '\' : 이스케이프 시퀀스 / \n : 개행문자 : 다음 줄로 출력하라는 명령이다.
  • ; (새미콜론) : 문장의 끝을 표현한다.
  • 공백 : 1. space 띄어쓰기 , 2. tab 띄어쓰기 , 3. '\' : 개행 줄바꾸기 / 컴파일러는 3개의 공백을 구분하지 않고 그냥 공백으로 인식한다.

형식 지정자 (%자료형)

  • 특정 자료형의 값을 인수로 받아 출력하는 과정에서 사용되는 형식이다.
  • %[플래그][폭][.전체 자릿수][자료형] 순서로 작성한다.
  • %d : 10진수 정수
  • %f : 부동 소수점 실수 (float, double)
  • %u : 부호가 없는(unsigned) 정수 10진수
  • %x : 부호가 없는 정수 16진수 (소문자)
    • 0x
    • 접두사가 붙으려면 플래그 #을 붙여서 써야한다.
  • %X : 부호가 없는 정수 16진수 (대문자)
    • 0X
  • %c : 단일 문자 (char) , 작은따옴표 사용
  • %s : 문자열 (string) , 큰 따옴표 사용
//%d : 정수 출력
printf("%d + %d = %d\\n", 2, 3, 2 + 3);

//%f : 실수 출력
//.2f : 소수점 2자리수만 출력하라는 명령이다.
printf("%f\\n", 3.14);
printf("%.2f\\n", 3.14159);

//%c : 1글자 출력
//'' : 문자 하나를 값으로 표현할때 사용한다.
printf("%c %c %c\\n", 'a', 'b', 'c');

//%s : 문자열 출력
printf("%s\\n", "안녕하세요");

플래그 지시문

  • 선택적 플래그라고도 불리며 출력 형식을 지정한다.
    • 16진수 출력의 경우 0X 접두사를 붙이는 식이다.

플래그 의미 기본값

+ 부호(+ 또는 -)를 사용하여 부호 있는 형식인 경우 출력 값의 접두사를 지정한다. 부호 있는 음수 값(-)에 대해서만 기호가 표시된다.
- 지정한 필드 너비 내에서 결과를 왼쪽에 맞춰 표시한다. (아무 부호도 안붙이면) 오른쪽에 맞춰 표시한다.
0 최소 너비에 도달할 때까지 앞에 0을 추가한다. 즉, 너비가 정해진만큼 공백 대신에 0을 넣는다. 아무것도 없는 공백이 출력된다.
blank 양수일때는 공백을 넣지만, 음수의 경우 - 부호를 출력한다. 공백은 표시되지 않는다.
# %x, %o와 사용되는 경우 0이 아닌 0X 접두사가 사용된다. 소수점 뒤에 숫자가 있는 경우 소수점이 표시된다.

너비 사양

  • 출력되는 최소 문자 수를 제어하는 10진수 정수다.
  • 출력되는 문자 수가 최소 문자 수보다 적을경우 플래그 (-)의 여부에 따라 왼쪽 또는 오른쪽에 공백이 추가된다.
  • 너비 지정은 값을 자르지 않는다.
    • 지정된 너비보다 크거나 최소 문자 수가 지정되지 않았다면 자릿수 사양에 따라 모든 문자가 출력된다.
  • 너비지정이 ‘*’인 경우 인수 목록의 int 인수가 너비 지정 값이 된다.
    • %0*d, 5, 3 → 플래그 0 : 최소 너비 도달까지 공백에 0을 출력하라, * : 인수를 받아서 너비값을 지정하라 (최소너비 5), d : 10진수 정수를 출력
    • 결과 : 00003 → 생성된 공간은 5칸, 출력은 오른쪽으로, 출력하는 정수는 3 이다.

전체 자릿수 사양

  • 변환 형식에 따라 1. 문자열 문자 수, 2. 소수 자릿수 또는 출력할 유효 자릿수 를 지정하는 ‘마침표 .’ 와 음수가 아닌 소수 정수로 구성된다.
    • %.3d → 소수 3째자리까지 출력하는 명령이다.

변수와 연산자

리터럴

  • 숫자 3 또는 문자열 Hello와 같은 변수의 값이나 식의 결과가 아닌 자체로 표현되는 값이다.
  • ‘상수’는 리터럴을 대신하고 값이 변경될 수 있는 변수와 달리 프로그램 전체에서 동일한 값을 유지하는 의미이다.
    • 상수 : 변수처럼 값을 저장하는 메모리 공간이지만, 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다.

변수

  • 값 저장 및 변경 가능한 메모리 공간이다.
  • 변수는 ‘선언’ 이후부터 사용 가능하다.
    • 선언 : 컴파일러에 특정 자료형 변수 사용을 알리는 과정
  • 데이터 형, 변수 이름 2가지 요소가 필요하다.
  • 데이터형, 메모리가 중요하다.
    • 변수는 메모리에 접근하는 수단이다.
    • 메모리 접근 : 메모리의 데이터를 읽고 쓴다 는 것이다.
    • 메모리는 bit → byte …순의 크기로 이루어져있다.
  • 같은 공간에 다시 쓴다면 이전 값에 ‘덮어 씌워진다.’
    • 변수 값, 여러 번 변경 가능.
  • 주석을 달지 않아도 어떤 역할을 하는지 알 수 있는 이름이 좋다.

변수 선언 및 대입

int a; //선언
a = 3; //대입, 데이터 접근 후 쓰기
printf("%d\\n", a); //데이터 접근 후 읽기
  • 한줄씩 모두 ‘식’이라고 부른다.
  • 정수는 ‘(리터럴)상수’ 라고 한다.
  1. "%d\n" : 이것도 ‘리터럴 상수’로 취급한다.

변수의 초기화

int a = 2;  // a를 2로 초기화
int b = 3;  // b를 3으로 초기화
  • 변수의 선언 후 초기값을 할당하는 과정이다.
  • 할당하지 않은 변수는 문제가 생길 수 있다.
  • 변수 초기화 시 프로그램 안정성 향상 (쓰레기 값 방지).

변수명(식별자) 규칙

  • 허용 문자: 영문자(대소문자 구분), 숫자, 밑줄(_).
  • 시작 문자: 첫 글자에 숫자 불가
  • 공백 불가: 중간 공백 불가
  • 예약어 사용 불가: int, char 등 C++ 키워드 사용 불가.
  • 의미 있는 이름 권장: 가독성 향상.

연산자 (=, +, - …)

int a = 5;
int b = 3;
int add = a + b;  // 덧셈
int sub = a - b;  // 뺄셈
int mul = a * b;  // 곱셈
int div = a / b;  // 나눗셈 (정수 나눗셈은 몫만 반환)
int mod = a % b;  // 나머지
  • = : 대입(할당) 연산자
    • 변수 = 상수(변수 등) 형식으로 사용한다.
    • 데이터 형이 일치(호환)해야 한다.
    • 좌항은 반드시 변수가 와야한다.
  • / : 나누기 연산자
    • 정수 / 정수 → 몫(정수)만 나온다.
    • 정수 / 실수 → 실수가 나온다.
  • % : 나머지 연산자
    • 정수형의 나눗셈은 몫이 나오는 / 나눗셈과 나머지가 나오는 % 나눗셈 연산이 있다.
  • sizeof 연산자 : 자료형/변수의 메모리 크기(바이트 단위) 반환.
    • 컴파일할때 미리 메모리의 크기가 정해지기에 그 수치가 나오게된다.
    • sizeof(변수명 또는 자료형) 형식으로 사용한다.

자료형

  • 데이터 종류별 표현 및 저장을 위한 메모리공간 크기
  • 사이즈, 규칙 2가지를 기억해야한다.
  • int : 4byte 크기의 정수형이다.
    • 소수점이 없는 상수는 정수로 취급한다.
  • float : 4byte 실수형이다.
    • 부동 소수점이라고 한다.
    • 부정확한 수 이기 때문에 정확한 수치를 요구하는 작업에서 사용하면 정확한 수치를 직접 찾아야한다.
    • 3.5f
  • double : 8byte 실수형이다.
    • float과 double의 차이 : 소수점만 붙으면 double, f 접미사가 붙으면 float이다.
  • unsigned 키워드 : 자료형 앞에 사용, 부호 없는 형태로 변경 (예: unsigned int). 음수 표현 불가, 양수 표현 범위 약 2배 증가.

비트와 바이트

  • 비트 : 데이터 표현 최소 단위 (0 또는 1).
  • 바이트 : 8 비트 (1 Byte = 8 Bits).
  • 자료형별 메모리 크기(바이트 수)가 다르다.

이진법과 정수 자료형

  • 컴퓨터 내부 데이터 처리: 0과 1 조합인 이진법 사용.
  • 정수 자료형 표현 범위: 할당된 비트 수에 따라 결정.
    • 예: n비트 부호 없는 정수 범위: $0$ ~ $2^n - 1$.
    • 부호 있는 정수: 보통 최상위 비트(MSB)를 부호 비트로 사용.

보수

  • 보수 : 보충해주는 수
    • 6에 대한 10의 보수는 ‘4’이다.
  • 1의 보수 : 이진법의 모든 자리에서 ‘1’이 나오는 수를 구하면된다.
    • 1010 (10)의 1의 보수는 0101이다.
  • 2의 보수 : 1의 보수에 ‘1’을 더한 값이다.
    • 1010의 1의 보수는 0101이고, 1을 더하면 0110이 나온다.
  • 이진수 음수표현 : 최상위 비트를 이용하여 0일땐 ‘양수’ , 1일땐 ‘음수’로 사용한다.
    • 보수법 사용
    • 0000 1010 (10)의 음수표현을 1의 보수로 바꾸면 1111 0101이고 2의 보수를 사용하면 1111 0110이 된다.

동적과 정적

  • 정적 (static) : 실행파일에 데이터값이 고정되어있는 형식
  • 동적 (real time) : 실행파일의 실행 중에 값이 바뀌는 형식이다.

형변환

  • 형변환 : 특정 자료형 값을 다른 자료형 값으로 변환하는 과정이다.
    • 암시적 형변환 : 컴파일러가 자동적으로 데이터손실 없이 안전하게 형변환
      • 실수 -> 정수형 변수 대입: 소수점 이하 절삭.
      • 정수 -> 실수형 변수 대입: 실수로 변환.
    int math = 90, korean = 95, english = 96;
    int sum = math + korean + english;  // sum은 정수
    double avg = sum / 3;  // 정수 / 정수 연산 결과는 정수(몫). 이후 double 자동 형변환.
                           // (90 + 95 + 96) / 3 = 281 / 3 = 93 (정수 연산)
                           // avg = 93.0 (double로 변환)
    printf("평균 점수 : %f\\\\n", avg); // 예상과 다른 93.000000 출력
    
    • 명시적 형변환 : 프로그래머가 의도적으로 형변환, 데이터 손실 발생 가능
      • sum을 (double)로 강제 형변환 -> (double)sum / 3은 실수 / 정수 연산 -> 실수 나눗셈 수행 -> avg에 정확한 평균값 저장.
  • int a = 3.14; //암시적 형변환 float b = 10; //암시적 형변환

char형과 ASCII 코드

  • 문자도 숫자로 표현이 가능하다.
    • 문자의 비트값마다 정해진 값이 존재한다.
  • ASCII 코드 : 영문 알파벳, 숫자, 특수 문자 등 컴퓨터 표현용 문자 인코딩 표준이다.

문자끼리 덧셈

printf("%c + %c = %c\\\\n", '2', '3', '2' + '3'); // 결과: 2 + 3 = e
  • 2의 아스키코드는 50, 3의 아스키코드는 51, 두 문자를 더하면 문자열이 되기에 아스키코드 101의 e가 나온것이다
printf("%c %d\\\\n", '2', '2'); // 결과: 2 50
                                // '2'를 문자로, '2'를 정수(ASCII 코드)로 출력
  • %c : 문자로 출력
  • %d : ASCII 코드 값(정수)로 출력