따배씨++ (2.1 fundamental data type)
안녕하십니까. 김동우입니다.
2월 마지막주부터 3월 1일까지 이어진 연휴를 잘 보내고 다시 돌아왔습니다.
그럼, 공부했던 코드를 그대로 올리도록 하겠습니다.
#include <iostream>
#include <bitset>
int main()
{
using namespace std;
int j = 3;
int i = -1;
int k = 123;
char a = 'H';
// 'H'를 아스키 코드로 변환 -> 0,1 전압의 차이를 나타내는 2진수로 변경
// 1byte = 8bit, 1bit는 2^1, 2bit 2^2 의 범위를 표현 가능
// 메모리의 주소와는 큰 관계가 없는 개념이고, 주소는 계속 변한다.
// 타 프로그램 또한 메모리를 사용하고 있기 때문 -> chrome 등
// x86, x64 컴파일에 따라서 또 주소 표현이 달라진다.
// char의 경우 1byte, integer의 경우 4byte를 차지한다.(메모리를)
// 각 자료형에 따라 차지하는 공간의 크기가 다르다.
// 1. wchar_t는 다른 char와 문자를 저장하는 방식이 다르다.
// 문자열을 저장하는 방식 -> string : fundamental dtype은 아니다.
// std에 존재하는 dtype이다.
// integer의 경우 unsigned, signed로 나뉜다.
// signed type 내에도 char가 존재한다. - 문자열, 정수형 둘 다 된다.
// 정수로 저장하더라도 문자로 변환해서 출력한다.
// unsigned - 양의 정수와 0
// signed - 음의 정수와 양의정수, 0
// 수학에서 음, 양의 정수를 말할 때 기본적으로 0은 제외된 상태이다.
// signed와 unsigned는 동일한 bit를 가진다.
// 그렇다면 unsigned의 경우 양의 정수 범위가 늘어나는가?
// signed의 경우 생략이 가능한 자료형이 존재한다.
// short, int, long, long long이 그에 해당한다.
// unsigned 의 경우에도 int는 생략할 수 있다.
// 해당 자료형은 최대 크기를 제한하지 않고, 최소 크기만을 제한한다.
// 컴파일러에 따라 자료형의 범위가 달라질 수 있다.
// 부동소수점 (float, double, long double) 개념은 후에 다시 나온다.
// 정밀도의 차이를 나타내기 때문에 float과 double의 차이가 있다.
// 단정밀도 - 배정밀도 (float - double)
// bool은 true, false의 형태
// void type의 경우 no storage type이다.
// null pointer는 후에 포인터에서 나온다.
cout << (uintptr_t)static_cast<void*>(&a) << endl;;
// output : 470038543108
cout << (uintptr_t)static_cast<void*>(&i) << '\n' << endl;;
// output : 470038543044
// -----------------------------------------------------------------
bool bValue = false;
cout << (bValue ? 'A' : 'B') <<'\n' << endl; //output : B
// bValue -> true : 1, false : 0
// bool 타입은 숫자로 저장된다.
char chValue = 'A';
char chValue2 = 65;
cout << chValue << endl; // output : A
cout << (int)chValue << endl; // output : 65
cout << chValue2 << '\n' << endl; // output : A
// 문자열 저장방식 숫자 -> 숫자를 문자열로 저장 시 문자.
float fValue = 3.141592f;
// float은 f를 넣어주자. 그렇지 않을 경우 compiler는 double로 인식.
// 정밀도가 더 높은 수를 float에 넣을 경우 잘릴 수 있다고 경고한다.
// float과 double의 차이에 대해서는 잘 알아야 한다.
double dValue = 3.141592;
cout << fValue << endl; // output : 3.14159
cout << dValue << '\n' << endl; // output : 3.14159
// 출력 시 자리수가 변경되는 것은 cout에서 하는 것이고,
// 내부적으로는 정확하게 저장할 수 있는 방식으로 저장한다.
// 그러나 해당 dtype들은 수학적으로 완벽하지 않다.
auto aValue = 3.141592; // double aValue로 선언
auto aValue2 = "Apple"; // char[6], string aValue2로 선언
// 쌍따옴표를 써야 string 선언이 가능하다.
cout << aValue << endl; // output : 3.14159
cout << aValue2 << '\n' << endl; // output : Apple
cout << sizeof(aValue) << endl; // output : 8 (x64)
cout << sizeof(aValue2) << '\n' << endl; // output : 8 (x64)
// sizeof는 sizeof(dtype) or sizeof(variables) 로 사용
// 해당 자료형이나 변수가 얼마나 byte를 차지하는지 나타낸다.
// -----------------------------------------------------------------
int a = 123; // copy initialization
int b(123); // direct initialization - OOP 에서 주로 사용
int c{ 123 }; // uniform initialization - OOP 에서 주로 사용
// int d(3.14); // warning - non strict : 잘릴 수 있다고 경고
// int e{ 4.5 }; // error - strict : 불가능한 선언이다.
// copy, direct - 실행은 시켜주지만 소실될 수 있음을 경고
// uniform - 실행 자체를 거절한다.
int intV1, intV2, intV3;
char charV1, charV2;
// 같은 자료형의 여러 변수를 동시에 선언 가능
// 해당 선언과 비슷하게 선언할 때, 하나의 변수만 초기화 하지 말자.
// 초기화하려면 모두 초기화하자.
// 변수의 선언은 변수 사용처와 가깝게 하자. - 디버깅이 편해진다.
// 리팩토링에 있어서도 해당 방식이 상당히 편하다.
// 현재 저의 노트처럼 해주시는 것을 의미합니다.
return 0;
}
C++ 자료형에 관련된 노트와 코드입니다.
해당 코드를 조금 예쁘게 올리고 싶은 마음이 있지만, 지금 벨로그 글을 꾸미는 것보다는 할 일이 많기 때문에 이해해주셨으면 좋겠습니다.
오늘은 기본 개념에 대한 내용이었기 때문에, 따로 작성할 글은 더 없는 것 같습니다.
그렇기에 당장 중요한 내용은 아니지만, 제가 따로 고민했던 것을 적어보고자 합니다.
-
w_char - char
해당 자료형들은 문자를 나타내는 자료형입니다. 그러나 w_char의 경우 UNICODE, char의 경우 ASCII로 문자열을 저장하게 됩니다.
이 차이에 의해 할당되는 byte가 달라지게 되며, w_char는 2byte, char의 경우 1byte의 메모리 공간을 차지하게 됩니다.
-
unsigned 자료형의 범위는 양의 정수를 더 표현할 수 있는가?
결론은 맞습니다.
unsigned int의 경우 signed int의 음의 정수 범위만큼을 양의 정수로 더 표현할 수 있게 됩니다.
즉, 0 ~ 4,294,967,295 의 범위를 가지게 되는 것이죠.
자, 그럼 이번 글은 여기까지 적겠습니다.
Author And Source
이 문제에 관하여(따배씨++ (2.1 fundamental data type)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongwu-kim/따배씨-2.1-fundamental-data-type저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)