종강을 했습니다. 사실 종강한 지는 조금 되었는데 나태해서 이제야 글을 다시 쓰게 되었네요. 매주 글을 쓰기로 마음을 먹었었는데 참 쉽지 않은 것 같습니다. 그래도 이번 학기는 전공 공부에 집중한 덕분에 우수한 성적으로 학기를 마무리할 수 있었는데요. 의외의 수확인 것 같습니다.
학기도 끝났고 이제는 개발에 관한 공부를 하고 싶어서 C++을 다시하게 되었습니다. 이번에는 학교에서 주최하는 NGT 러닝패스 프로그램에 참여하게 되어 패스트 캠퍼스의 무료강의를 수강할 수 있게 되었는데요. 아직 조금밖에 들어보지 않았지만 강의를 진행하시는 강사분이 중요하지만 언뜻 중요하지 않아 보여서 지나칠 수 있는 부분도 집어주고, 요즘의 트렌드를 반영하여 설명하고, 활용에 대한 예제도 많이 보여주셔서 꽤나 좋았습니다. 그래서 강의를 보며 공부한 내용을 블로그에 적어놓겠습니다. 지켜봐 주세요 ㅎㅎ 감사합니다.
Ch 01. C++ 오리엔테이션
소개
데니스 리치와 켄 톰슨이 유닉스를 만들기 위해 C를 만들었다.
비야네 스트롭스트룹이 C++을 만들었다.
C++은 여러 버전이 있다. 현재 최신은 C++20.
개발 환경
IDE는 통합 개발환경을 의미한다. 컴파일, 빌드, 디버깅, … 을 제공한다.
Visual Studio : 가장 점유율이 높은 IDE이다. 이번 강의에서 사용한다.
프로젝트 둘러보기
소스코드와 주석으로 구분된다.
소스코드는 프로그램을 구성한다.
주석은 사람을 위해 쓰여진 정보이다.
//주석은 이렇게 작성한다.
/* 여러줄의
주석을
작성한다 */
Ctrl + F5 : 프로그램 실행
F5 : 디버그 시작
F9 : 디버그 중단점 설정
F11 : 한 단계 실행
main 함수는 프로그램이 시작되었을 때 제일 먼저 실행되는 함수이다.
빌드 : 솔루션을 빌드한다. 다시 빌드, 솔루션 정리, 등도 할 수 있다.
Hello World
#은 전처리기에 지시하는것을 의미한다.
#include <iostream>
//인풋 아웃풋 스트림을 인클루드 시킨다.
함수의 구조는 반환형 함수이름 인자 함수몸체로 구성된다.
#include <iostream>
int main (){ //반환값과 함수이름
//함수몸체
std::cout<<"Hello World";
return 0; //리턴값
}
Ch 02. 데이터
정수형
변수 : 데이터를 담는 그릇
int : 정수형 변수를 의미한다.
int x, y, z; //정수형 변수 x, y, z
변수의 초기화
int x = 1; //C style 초기화
int y(2); //C++ style 초기화
정수형 변수에 실수를 넣게 되면 소수 부분은 잘려서 없어지게 된다.
int x = 1.5;
std::cout<<x; //1이 출력된다.
리터럴 정수 표현
11 //10진법
011 //8진법
0b11 //2진법
0x11 //16진법
다양한 인트 표현
short 2 바이트 -32768 32767
unsigned short | 2 바이트 | 0 | 65535 |
int | 4 바이트 | -21억 | 21억 |
unsigned int | 4 바이트 | 0 | 42억 |
long | 4 바이트 | -21억 | 21억 |
unsigned long | 4 바이트 | 0 | 42억 |
long long | 8 바이트 | -900경 | 900경 |
unsigned long long | 8바이트 | 0 | 1800경 |
sizeof 연산자
sizeof(int)
sizeof(변수)
sizeof 변수
//인자의 크기를 출력한다.
리터럴의 타입 지정 방법
11u //unsigned int
11L //long
11LL //long long
11LLu //unsigned long long
이진법
1101 : 2^3 + 2^2 + 2^0 = 8 + 4 + 1 = 13
각 자릿수만큼 2의 제곱을 해준값을 더해준다.
음수인 정수의 표현방법 : 2의 보수 표현법
모든 비트를 반전시킨 후 1을 더해준다.
0010 0100 1011
1101 1011 0100 //비트반전
1101 1011 0101 //+1
최대 최솟값 보기
#include <numeric>
using namespace std; //std의 네임스페이스 사용
int main(){
cout << numeric_limits<int>::max() << endl; //최대
cout << numeric_limits<int>::max() << endl; //최소
}
부동 소수점
float : 부동 소수점 형 변수를 의미한다.
float a = 1.5;
float 4 바이트 부호(1) + 지수부(8) + 가수부(23)
double | 8 바이트 | |
long double | 8 ~ 16 바이트 |
부동 소수점형의 형변환을 막는법
1.0f //float
1.0 //double
1.0L //long double
memcpy : 메모리 카피
memcpy(새 주소, 기존 주소, 데이터의 크기);
//기존 주소의 데이터를 새 주소로 옮긴다.
부동 소수점형은 오차가 있기 때문에 조건문에 사용하지 않는다.
문자형
char : 문자형의 변수를 의미한다.
char ch = 'a';
char 1 바이트
아스키 표의 값을 따른다 (7비트)
타입 간의 형변환
(int)ch //C style 형변환
int(ch) //C++ style 형변환
이스케이프 시퀀스
\\n : 개행
\\t : 탭
\\b : 백스페이스
\\a : 경고음
\\' : '
\\" : "
\\\\ : \\
/x16진수 : 숫자에 맞는 아스키 문자 출력
/8진수 : 숫자에 맞는 아스키 문자 출력
불리언형
bool : true or false를 표현하는 타입이다.
bool bo = true;
bool 1 바이트
다양한 연산자
0 == 0 // 같다
1 > 0 //크다
0 < 1 //작다
1 >= 0 //크거나 같다
0 <= 1 //작거나 크
cout.setf(ios_base::boolalpha); : cout의 출력값을 true, false로 보여준다.
Ch 03. 입출력
printf
print formatted
#include <cstdio>
//헤더파일
printf("Hello World!");
printf("%d",10);
형식 지정자를 사용할 수 있다.
%d : 10진수
%i : 10진수
%u : unsigned int
%hhu : unsigned char
%f : float, double
%lf : float, double
%x : 16진수 (소문자)
%X : 16진수 (대문자)
%o : 8진수 (소문자)
%010d : 10 자릿수를 지정하고 앞쪽을 0으로 채움
%.1f : 소수점 아래 한 자릿수만 표현
%-10d : 10 자릿수를 지정하고 왼쪽 정렬
%% : % 출력
freopen("output.txt", "w", stdout);
//표준 출력 스트림을 파일로 연결
scanf
scanf("%d",&num); //정수를 받아서 num에 저장
성공적으로 입력받은 횟수를 반환한다.
if(scanf("%d", &num)){ //성공적으로 받으면 if문 실행
//
}
형식을 맞춰서 입력을 받기
scanf("%d + %d = %d", &n1, &n2, &n3);
%i는 접두사를 붙여서 진법을 정해줄 수 있다.
0x10이라고 입력하면 16이 나온다.
scanf("%i" , &num);
printf("%i" , num);
%f : float
%lf : double
버퍼에 문자가 남아있어서 입력이 안될 때
while(getchar() != '\\n'); //개행이 나올 때 까지 버퍼 비우기
텍스트 파일로 입력받기
freopen("input.txt", "r", stdin);
//표준 입력 스트림을 파일로 연결한다.
cout
using namespace std;
cout << 1 << "1" << '\\n' << endl;
다양한 타입을 한 번에 출력할 수 있다.
cout.put('a'); // 한글자 출력
cout.write("hello", 5); //5글자 출력
cout.width(10); //폭을 10으로 설정
cout.fill('#'); //공백을 #으로 채운다.
cout.precision(n) : cout의 정밀도를 n으로 설정한다.
cout.setf(ios_base::showpos); : 부호를 표시한다.
cout.unsetf(ios_base::showpos); : 부호를 표시하지 않는다.
cout.setf(ios_base::boolalpha); : 부울을 문자로 표시한다.
cout.setf(ios_base::left, ios_base::adjustfield); : 좌측으로 정렬한다.
cout.setf(ios_base::hex, ios_base::basefield); : 16진수로 출력한다.
hex(cout); : 16진수로 설정
cout << hex << 16; : 16진수로 출력
cout<<setw(10)<<setfill('#')<<setprecision(3)<<1.1f;
: 1.1을 너비 10 정밀도 3 빈곳은 #으로 채워서 출력한다.
cin
int num;
cin >> num; //입력에 실패하면 0 입력
cout << num;
if(cin>>num) // scanf 처럼 쓸 수 있다.
입력에 문제가 생겼을 때
if(cin.fail()) // 입력에 실패하면 버퍼를 비워준다.
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\\n'); //개행이 나올 떄 까지 무시
문자로 부울 받기
cin.setf(ios_base::boolalpha);
cin.setf(ios_base::hex, ios_base::basefield); : 16진수로 입력받기
Ch 04. 연산자
산술 연산자
a=b=c=10; //할당 연산자 : 오른쪽값을 왼쪽에 대입하고 그 값을 반환
+1 -1 //단항 연산자
++num num++ //전위 후위 연산자
num+=10 //복합 연산자
비교&관계 연산자
0 == 0 // 같다
1 > 0 //크다
0 < 1 //작다
1 >= 0 //크거나 같다
0 <= 1 //작거나 크다
우주선 연산자
num1 <=> num2 //같으면 0 크면 양수 작으면 음수 반환
(1<=>1) == 0 //왼쪽의 형식으로 사용함
is_eq(1<=>1) //같으면 true
is_neq(1<=>1) //같지않으면
is_lt(1<=>1) //작으면
is_lteq(1<=>1) //작거나 같으면
is_gt(1<=>1) //크면
is_gteq(1<=>1) //크거나 같으면
strong odering : 타입까지 동일함
partial odering : 값은 동등하다
논리 연산자
&& //and
|| //or
! //not
연산자 우선순위 : ! > && > ||
short circuit evaluation
false && 조건문 // 조건문 검사를 하지 않음 어차피 false 이기 때문
true || 조건문 // 어차피 true이므로 검사를 하지 않음
비트 연산자
& //and
| //or
~ //not
^ //xor
>> //right shift 2분의 1배가 됨
<< //left shift 2배가 됨
제곱 연산자
pow(2, 0) //2의 0 제곱
홀수개가 있는 수를 찾기 (a= 1, b=2, c=3, d=2, e=1)
cout<<(a^b^c^d^e)<<endl;
//3 출력
//모든 수를 xor 연산한다.
기타 연산자
삼항 연산자
조건문 ? true일때 : false일때 // 조건문이 참이면 true일때, 거짓이면 false일때
범위 지정 연산자
std::cout //std의 cout
::변수 // 전역변수에 접근
'C & C++ > C++' 카테고리의 다른 글
[C++] 연산자 오버로딩 (4) | 2024.07.16 |
---|---|
[C++] 클래스 (0) | 2024.07.13 |
[C++] 함수, 범위, 공간 (0) | 2024.07.08 |
[C++] 포인터, 참조 (1) | 2024.07.01 |
[C++] 흐름 제어, 복합 데이터 (0) | 2024.06.26 |