// 예제 5-1 : 6가지 정수 타입의 범위 실험
int main()
{
short int si;
unsigned short int usi;
int i;
unsigned int ui;
long int li;
unsigned long ul; // int가 없음에 주의
// 작은 값
si = 40000; // error
usi = 40000; // 이하 ok
i = 40000;
ui = 40000;
li = 40000;
ul = 40000;
// 조금 더 큰 값
si = 70000; // error
usi = 70000; // error
i = 70000; // 이하 ok
ui = 70000;
li = 70000;
ul = 70000;
// 더 큰 값
si = 2200000000; // 이하 error
usi = 2200000000;
i = 2200000000;
ui = 2200000000;
li = 2200000000; // 이하 ok
ul = 2200000000;
// li, ul의 한계 파악 (43억) cpp기본 타입으로는 보관불가
li = 4300000000;
ul = 4300000000;
// 음수
si = -100; //ok
usi = -100; // error
i = -100; // ok
ui = -100; // error
li = -100; // ok
ul = -100; // error
return 0;
}
/*
에러가 안뜬다.
이후에 필히 확인해야한다.
특히 음수값 오류가 안뜬다.
*/
// 예제 5-2 : 타입의 크기 알아보기
#include <iostream>
using namespace std;
int main()
{
cout << "short int : " << sizeof(short int) << " bytes\n";
cout << "unsigned short int : " << sizeof(unsigned short int) << " bytes\n";
cout << "int : " << sizeof(int) << " bytes\n";
cout << "unsigned int : " << sizeof(unsigned int) << " bytes\n";
cout << "long int : " << sizeof(long int) << " bytes\n";
cout << "unsigned long int : " << sizeof(unsigned long int) << " bytes\n";
return 0;
}
/*
unsigned long int라고 적혀있다.
이전은 int가 빠졌는데 책 오타인듯하다.
확인 필요.
// 갤럭시북 기준 결과
2 바이트
2 바이트
4 바이트
4 바이트
4 바이트
4 바이트
*/
// 예제 5-3 : 10, 8, 16진수의 사용
#include <iostream>
using namespace std;
int main()
{
// 10, 8, 16진법 사용
int decimal = 41;
int octal = 041;
int hexadecimal = 0x41;
cout << "41 = " << decimal << "\n";
cout << "041 = " << octal << "\n";
cout << "0x41 = " << hexadecimal << "\n";
return 0;
}
/* 결과
41 = 41
041 = 33
0x41 = 65
*/
// 예제 5-4 : 실수 타입의 사용
C++에서는 실수 뒤 f가 '없으면', double 값이라고 생각한다.
int main()
{
float f;
double d;
long double ld;
// 대입1
f = 0.00123f;
d = 1.23;
ld = 123.0;
// 대입2 : 지수
f = 1.23E-3f;
d = 1.23E0;
ld = 1.23E2;
return 0;
}
/*
float에 f를 지우면 double값으로 인식하고, float으로 형변환하면서 잘린다. warning 발생.
*/
// 예제 5-5 : char 타입의 사용
#include <iostream>
using namespace std;
int main()
{
char a;
char b;
char c;
a = 'G';
b = 'O';
c = 'D';
cout << a << b << c << "\n";
}
/*
문자는 작은따옴포사용
문자열은 큰따음표사용
char은 보통 1바이트
ASCII 약속사용 (American Standard Code for Information Interchange)
*/
// 예제 5-6 : 아스키 코드 값 확인
#include <iostream>
using namespace std;
int main()
{
int a = 'A';
cout << a << "\n";
char b = 65;
cout << b << "\n";
return 0;
}
/*
65
A
로 결과가 나온다.
A의 아스키코드는 65이다.
같은 65가 int냐 char에 따라 해석이 달라지는 것이다.
*/
// 예제 5-7 : 이스케이프 문자열 사용
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, Works";
cout << "\b\b";
cout << "ld!\n";
return 0;
}
/*
백스페이스 두번으로 뒤를 지운다.
*/
// 예제 5-8 : bool 타입 사용
#include <iostream>
using namespace std;
int main()
{
bool b1;
bool b2;
b1 = true;
b2 = false;
cout << "b1 = " << b1 << "\n";
cout << "b2 = " << b2 << "\n";
return 0;
}
/*
bool의 실제 보관값은 정수이다.
다만 타입에 따라 해석이 달라진 것 뿐이다.
*/
// 예제 5-9 : 기본 타입간의 형변환
#include <iostream>
using namespace std;
int main()
{
int i = 65;
float f = 66.89f;
char c = 'C';
bool b = true;
// 형변환할 변수 미리 정의
int f2i, c2i, b2i;
float i2f, c2f, b2f;
char i2c, f2c, b2c;
bool i2b, f2b, c2b;
// int를 다른 타입으로
i2f = i; // int -> float
i2c = i;
i2b = i;
// float ...
f2i = f; // float -> int
f2c = f;
f2b = f;
// char ...
c2i = c; // char -> int
c2f = c;
c2b = c;
// bool ...
b2i = b; // bool -> int
b2f = b;
b2c = b;
// 출력
cout << f << "\n" << f2c; // 간단하게 형변환 확인
return 0;
}
/*
bool로 형변환시 0이 아닌 수는 모두 1이다.
char로 형변환시 값의 변화 발생치 않는다. (소수는 소수점 이하는 잘리고 정수로 인식)
*/
// 예제 5-10 : 문제가 생기는 형변환
큰 타입에서 작은 타입으로의 형변환의 문제가 핵심이다.
실습은 스킵하였다.
'C++ > 뇌를 자극하는 C++' 카테고리의 다른 글
[C++] 챕터 8 - 성적표 프로젝트 Ver 1 (0) | 2023.04.25 |
---|---|
[C++] 챕터 7-2 - 분기와 반복 : 프로그램의 흐름 조절 (0) | 2023.04.25 |
[C++] 챕터 7-1 - 분기와 반복 : 프로그램의 흐름 조절 (0) | 2023.04.25 |
[C++] 챕터 6 - 연산자 : 정보를 가공하는 법 (1) | 2023.04.21 |
[C++] 챕터 4 - 변수 : 정보를 담는 방법 (0) | 2023.04.20 |
댓글