#include <iostream>
using namespace std;
int main()
{
// 변수를 정의할 때 자료형을 미리 지정해야 합니다.
// 자료형은 바꿀 수 없습니다.
// 내부적으로 메모리를 이미 갖고 있습니다.
int i; // 변수 정의
i = 123; // 변수에 값 지정 (객체 레퍼런스 아님)
// sizeof 소개
cout << i << " " << sizeof(i) << endl; // 추측해보세요.
float f = 123.456f; // 마지막 f 주의
double d = 123.456; // f 불필요
cout << f << " " << sizeof(f) << endl; // 123.456 4
cout << d << " " << sizeof(d) << endl; // 123.456 8
// C++는 글자 하나와 문자열을 구분합니다.
char c = 'a';
cout << c << " " << sizeof(c) << endl; // a 1
// 그 외에도 다양한 자료형이 존재합니다.
// 형변환
i = 987.654; // double을 int에 강제로 저장
cout << "int from double " << i << endl; // 추측해보세요.
f = 567.89; // 이것도 형변환
// 기본 연산자
// i = 987;
i += 100; // i = i + 100;
i++; // i = i + 1;
cout << i << endl; // 추측해보세요.
// 불리언
bool is_good = true;
is_good = false;
cout << is_good << endl; // 0
cout << boolalpha << true << endl; // true
cout << is_good << endl; // false
cout << noboolalpha << true << endl; // 1
// 논리 연산 몇 가지 소개 (참고 문서 사용)
// https://en.cppreference.com/w/cpp/language/operator_precedence
cout << boolalpha;
cout << (true && true) << endl; // 추측해보세요.
cout << (true || false) << endl; // 추측해보세요.
// 비교
cout << (1 > 3) << endl;
cout << (3 == 3) << endl;
cout << (i >= 3) << endl;
cout << ('a' != 'c') << endl;
cout << ('a' != 'a') << endl;
// 영역(scope)
i = 123; // 더 넓은 영역
{
int i = 345; // <- 더 좁은 영역의 다른 변수
cout << i << endl; // 추측해보세요.
}
cout << i << endl; // 추측해보세요.
return 0;
}
자료형
// 변수를 정의할 때 자료형을 미리 지정해야 합니다.
// 자료형은 바꿀 수 없습니다.
// 내부적으로 메모리를 이미 갖고 있습니다.
int i; // 변수 정의
i = 123; // 변수에 값 지정 (객체 레퍼런스 아님)
// sizeof 소개
cout << i << " " << sizeof(i) << endl; // 추측해보세요.
// 123 4
cout << sizeof(int) << endl;
// 4
cout << 123 + 4 << " " << sizeof(123+4) << endl;
// 127 4
float f = 123.456f; // 마지막 f 주의
double d = 123.456; // f 불필요
cout << f << " " << sizeof(f) << endl; // 123.456 4
cout << d << " " << sizeof(d) << endl; // 123.456 8
// C++는 글자 하나와 문자열을 구분합니다.
char c = 'a';
char str[] = "Hello, World!"; //std::string // 배열 생성
cout << c << " " << sizeof(c) << endl; // a 1
// 그 외에도 다양한 자료형이 존재합니다.
- 파이썬과 달리 c++는 변수를 정의할 때 자료형을 미리 지정해야 하고, 지정한 자료형은 바꿀 수 없다. 이는 메모리를 미리미리 할당하기 때문이다.
- 변수명은 메모리 공간의 주소값
- c++는 변수 자체가 메모리가 정확히 어디에 있는지 주소를 알고 있기 때문에 값을 가져오는 시간이 파이썬에 비해서 빠르다
- int형은 4byte 이므로 sizeof(int)는 4이다
- char형은 1byte 이므로 sizeof(char)은 1이다
- 리터럴(literal)은 적어놓은 그대로가 값을 의미한다. 예를 들면 'a', 1024, 3.14f ...
- 변수(variable)은 변수 이름과 그 변수가 대표하는 메모리 공간에 저장된 값이 다르다. 예를 들면 위에서 변수 이름은 c이고 값은 'a'인 것처럼
형변환
i = 987.654; // double을 int에 강제로 저장
cout << "int from double " << i << endl; // 추측해보세요.
// int from double 987 (강제 형변환을 하면 버림을 한다)
f = 567.89; // 이것도 형변환
- int -> float : .0 이 된다
- float -> int : 소수점자리를 버린다
ex) int i = 987.654 -> i는 987
기본연산자
// i = 987;
i += 100; // i = i + 100;
i++; // i = i + 1;
cout << i << endl; // 추측해보세요.
// 987 + 100 + 1 = 1088
bool
bool is_good = true;
is_good = false;
cout << is_good << endl; // 0
// is_good를 true에서 false로 변경했으므로 0 (false) 이 나옴
// boolalpha를 지정하면 true는 true로, false는 false로 나옴
// noboolalpha를 지정하면 true는 1로, false는 0으로 나옴
cout << boolalpha << true << endl; // true
cout << is_good << endl; // false
cout << noboolalpha << true << endl; // 1
- boolalpha를 지정하면 true는 true로, false는 false로 나옴
- noboolalpha를 지정하면 true는 1로, false는 0으로 나옴
논리 연산자
// https://en.cppreference.com/w/cpp/language/operator_precedence
cout << boolalpha;
cout << (true && true) << endl; // 추측해보세요. true
cout << (true || false) << endl; // 추측해보세요. true
비교 연산자
cout << (1 > 3) << endl; // false
cout << (3 == 3) << endl; // true
cout << (i >= 3) << endl; // true
cout << ('a' != 'c') << endl; // true
cout << ('a' != 'a') << endl; // false
영역(scope)
i = 123; // main함수 : 더 넓은 영역(전역변수)
// 좁은영역
{
int i = 345; // <- 더 좁은 영역의 다른 변수 (지역변수)
cout << i << endl; // 추측해보세요.
// 345
} // 여기서 이미 안쪽영역은 끝났으므로 이제 i에 345가 저장된것은 사용할수없음
// 지금부터 i는 123이 저장되어 있음
cout << i << endl; // 추측해보세요.
// 123