-
2.3 ~ 2.5 고정너비정수, void, double, 절단오차C++일기 2021. 5. 5. 09:16728x90반응형
제가 빠르게 복기하기 좋게 정리한 글입니다. 파일을 추가하는 세세한 방법과 과정은 마지막에 첨부된 영상으로 확인하시면 좋을 것 같습니다 :) 강의목차의 번호와 같은 목차번호를 사용하고 있으니 참고하세요!
2.3 고정너비 정수
플랫폼, 컴파일러에 따라서 자료형에 할당되는 메모리가 조금씩 다를 수 있다.
하지만 이러한 불확실한 점은 개발자에게 있어서 불안하다.
C++11부터는 고정적인 너비를 정하여 이러한 불확실성을 없애는 기능을 넣었다.
아직 쓸일은 잘 없고 이런게 있다~ 정도
1234567891011121314151617181920#include <iostream>int main(){//16_t : 16 bitsstd::int16_t i(5);// integer가 아닌 charstd::int8_t myint = 65;std::int_fast8_t fi(5);std::int_fast64_t fl(5);std::cout << i << std::endl; // Astd::cout << myint << std::endl;std::cout << fi << std::endl;std::cout << fl << std::endl;return 0;}cs 2.4 void
void는 비어있음을 의미한다. 이런 void 의외로 쓰임이 많다.
123456789101112131415161718192021222324252627282930313233343536373839404142#include <iostream>// 입출력이 따로 없이 기능수행만 하는 경우// 출력자료형이 없음을 void로 기술해줘야void myfunc(){}int main(){using namespace std;// void는 메모리를 차지하지 않는다.// 변수선언이 불가하다.//void myvoid;// 포인터는 할당메모리의 가장 첫번째 메모리 주소만// 나타낸다. 즉, 메모리크기가 달라도 주소를 나타내는// 형식은 동일하다.// 각 4 bytes, 8 bytes의 자료형 정의int i = 123;double d = 123.123;//사이즈 측정cout << sizeof(i) << endl;cout << sizeof(d) << endl;//자료형이 정해지지 않은 메모리공간(주소) 생성
//void my_void; 는 되지 않음void* myvoid;myvoid = (void*)&i;std::cout << myvoid << std::endl;myvoid = (void*)&d;std::cout << myvoid << std::endl;return 0;}cs 데이터 타입이 다르고 타입의 사이즈가 다르더라도, 데이터의 주소를 표현하는 데이터양은 동일하다.
이를 이용해서 void*로 저료형이 정해지지 않은 주소를 생성하고 이를 int형 주소로 변환하거나, float형 주소로 변환하여 사용함.
아무튼 void가 포인터를 쓸 때 많이 쓰인다.
2.5 floating point number : 소수점
표현가능한 가장 큰 수, 작은 수
이 때 느껴야 할 점은, double는 float가 차지하는 메모리는 2배이고 이는 컴퓨터에게 큰 차이라는 것.
123456789101112131415161718192021#include <iostream>#include <limits>int main(){using namespace std;float f;double d;long double ld;// max : 표현할 수 있는 가장 큰 수// min : 표현할 수 있는 가장 작은 절댓값// lowest : 표현할 수 있는 가장 작은 수cout << numeric_limits<float>::lowest() << endl;cout << numeric_limits<double>::lowest() << endl;cout << numeric_limits<long double>::lowest() << endl;return 0;}cs e의 활용
123456789101112131415161718include <iostream>int main(){using namespace std;float f(3.14);cout << 3.14 << endl;cout << 31.4e-1 << endl;cout << 31.4e-2 << endl;cout << 31.4e1 << endl;cout << 31.4e2 << endl;return 0;}cs 실수계산, 절단오차
1/3을 그냥 출력하면 유효숫자 6개로 뒤의 소수점들이 절단되어 나오지만
앞에 setprecision(유효숫자개수)를 출력시키고 진행하면 해당 유효숫자만큼의 수를 출력한다.
setprecision을 이용하면 덧셈에서 나타나는 절단오차의 누적오차를 확인할 수 있다.
<cmath> 라이브러리의 isinf, isnan을 이용해 무한대인지, 수가 아닌지를 bool 자료형으로 확인할 수 있다.
123456789101112131415161718192021222324#include <iostream>#include <iomanip> // setprecision 함수를 쓰기 위한 라이브러리#include <cmath>int main(){using namespace std;double z = 0.0;double posinf = 5.0 / z;double neginf = -5.0 / z;double nan = z / z;// true : 1 false : 0cout << posinf << " " << std::isinf(posinf) << endl;cout << neginf << " " << std::isinf(neginf) << endl;cout << nan << " " << std::isnan(nan) << endl;cout << 1.0 << " " << std::isnan(1.0) << endl;return 0;}cs 출처)
홍정모의 따배씨++
www.youtube.com/watch?v=TA82U984UTE&t=616s
좋은 강의에 너무나 감사하다.
이전에는 그냥 무작정 따라썼던 코드들을 한줄한줄 이해하며 공부할 수 있다.
언젠가 어느 언어든 자신감이 있는 코드마스터가 될 것이다.
데이터가 인간을 대신해 일을 하게하고
데이터를 제어해 로봇을 제어하고 싶다.
수많은 데이터가 넘실대는 현대에서는 데이터를 자유자재로 다루는 프로그래머.
실력있는 프로그래머가 되기 위해서는 코드 한줄이 내부적으로 어떻게 작동되는지를 이해해야한다.
728x90반응형'C++일기' 카테고리의 다른 글
2.7 문자형 char (0) 2021.05.06 2.6 불리언 자료형 (0) 2021.05.05 2.3 ~ 2.5 고정너비정수, void, double, 절단오차 (0) 2021.05.05 2.2 정수형 (0) 2021.05.04 2.1 기본자료형 (0) 2021.05.03 1.12 ~ 1.13 헤더가드가 필요한 이유(LINK ERROR), Namespace (0) 2021.05.03