안녕 개붕이들아
오늘도 뭔가 심심해서 글을 써볼까 생각중이야.
이번에는 지난번에 말한 것 처럼 변수에 대해서 배워보자.
일단 변수가 뭐냐?
변수는 상자야.
근데 이름이 있는 상자야.
즉, 값을 보관할 수 있는거지.
그럼 이제 변수를 만들어보자.
변수를 선언하는 기본적인 형태는 이렇게 돼.
자료형 변수이름;
간단하지?
int num;
그럼 위에 있는 변수는 뭔지 한번 분석해보자.
int는 자료형이야.
자료형이 뭔지는 곧 배워볼게.
num은 변수 이름이야.
즉 상자의 이름이지.
그럼 이 변수에 값은 어떻게 넣을까?
간단해!
변수이름 = 값;
이렇게 써주면 문제 해결이야!
예를 들어서 num = 34; 라고 적혀있으면,
num 이라는 변수에 34라는 값을 넣는다.
라는 뜻이야.
그럼 이제 자료형이 뭔지 한번 알아보자.
자료형은 변수(상자) 안에 들어갈 수 있는 물건의 종류에 대해 나타내.
그럼 자료형들을 한번 보자.
구분 | 자료형 | 크기 | 범위 |
---|---|---|---|
기본형 | void | – | – |
문자형 | (signed) char | 1 byte | -128 ~ 127 |
unsigned char | 1 byte | 0 ~ 255 | |
wchar_t | 2 byte | 0 ~ 65,535 | |
정수형 | bool | 1 byte | 0 ~ 1 |
(signed) short (int) | 2 byte | -32,768 ~ 32,767 | |
unsigned short (int) | 4 byte | 0 ~ 65,535 | |
(signed) int | 4 byte | -2,147,483,648 ~ 2,147,483,647 | |
unsigned int | 4 byte | 0 ~ 4,294,967,295 | |
(signed) long (int) | 4 byte | -2,147,483,648 ~ 2,147,483,647 | |
unsigned long (int) | 4 byte | 0 ~ 4,294,967,295 | |
__int8 | 1 byte | -128 ~ 127 | |
__int16 | 2 byte | -32,768 ~ 32,767 | |
__int32 | 4 byte | -2,147,483,648 ~ 2,147,483,647 | |
__int64 | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4 byte | 3.4E-38(-3.4*10^38) ~ 3.4E+38(3.4*10^38) (7digits) |
(long) double | 8 byte | 1.79E-308(-1.79*10^308) ~ 1.79E+308(1.79*10^308) (15digits) |
이야 뭔가 엄청 복잡하다.
뭐가 많긴 한데, 일단 자주 사용하는것들 위주로 알아보자.
int 형
이건 프로그래밍 하면서 가장 많이 사용할 자료형이야.
int는 integer (정수) 의 약자야.
즉, 말 그대로 int 형의 변수에는 숫자를 넣을 수 있어.
7645, -35, 0, 454
같은거 말야.
근데 소수는 못넣어.
int num;
num = 1234;
이런식으로 사용 가능해!
float 형
이건 소수를 의미해.
float 형의 변수에는 소수를 넣을 수 있지!
주의해야할건 소수를 표시할 때, 5.45f 같은 식으로 적어줘야돼.
float dec;
dec = 3.14;
이런식으로 사용 가능해!
double 형
이건 좀 더 자세한 소수를 표시할 때 쓰는거야.
3.5453523675.. 같은거 있잖아
그런 큰 소수까지 저장 가능해.
근데 이건 큰 소수까지 저장 가능한만큼 메모리를 많이 잡아먹어.
근데 솔직히 그런거 큰 차이 안나거든, 그러니깐 그냥 맘에 드는걸로 써.
double dub;
dub = 3.141592;
미안 내가 파이 자릿수를 이거보다 더 많이 몰라서 여기까지만 쓸게.
어쨌든 긴 소수를 저장할 수 있어.
bool 형
bool은 boolean 의 약자야.
그게 뭔 뜻이냐고?
0과 1을 의미해.
다른 말로는 참과 거짓이지!
bool 형에는 true와 false 값만 넣을 수 있어.
즉, 이 변수에는 true 나 false 또는, 0이나 1을 넣을 수 있어.
bool isGaeBungEstupid;
isGaeBungEstupid = true;
이런식으로 사용 가능해!
char 형
이건 character (문자) 의 약자야
즉, 문자를 저장할 수 있어.
근데 문자라고 해봤자 그냥 영어랑 기호랑 숫자정도 넣을 수 있다고 생각하면 돼.
어라? 근데 숫자가 들어간다고?
그럼 int랑 뭔 차이지?
int 형은 엄청 커.
근데 char형은 작아.
127 이상 -128 이하 인 숫자는 넣을 수 없거든..
그래서 주로 문자를 담거나, 작은 크기의 정수를 넣을 때 사용하지.
C++ 에서는 문자를 ' ' 를 이용해서 구분해.
'D' 라고 적혀있으면, 이건 문자 D 라는 뜻이야.
'9' 라고 적혀있으면, 이건 문자 9 라는 뜻이지.
즉, 9랑 '9' 는 다르다는거야.
어쨌든, 이건
char bloodType;
bloodType = 'O';
같이 사용 가능해.
std::string 형
이건 iostream 라이브러리에 있는것중에 하나인데,
정말 많이 쓰는거여서 알고있는게 좋아.
이건 문자열 이라는 뜻이야.
즉, "안녕 나는 개붕이야!" 같은걸 저장할 수 있다는거지.
전에 말했다싶이, std::string 은 std 라는 라이브러리에 있는 명령어들 중에 string 이라는 명령어를 가져온다는 뜻이야.
이건
std::string str;
str = "Hello, DogDrip World!";
같이 사용해.
아까 문자에서 사용한 것 처럼,
" " 은 문자열을 표시하기 위한 기호같은거야.
문자에서는 작은따옴표, 문자열에서는 큰 따옴표.
잘 외워봐!
근데말야...
항상 변수 선언하고 값 저장하고 하는거 귀찮지 않아?
그래서 나온게 있어!
바로..
자료형 변수이름 = 값;
이야!
그냥 한번에 합쳐버린거지
뭐 이것도 기억하고 있어.
자 그럼 이제 한번 응용해보자.
#include <iostream>
int main (void) {
std::string name = "승희";
int age = 28;
float grade = 98.58f;
bool isVirgin = true;
char sm = 'S';
std::cout << name << "의 나이는 " << age << "살 이며, 성적은 " << grade << "점, 성적 취향은 " << sm << ", 그리고 동정 여부는 " << isVirgin << " 입니다." << std::endl;
return 0;
}
이걸 실행하면
승희의 나이는 28살 이며, 성적은 98.58점, 성적 취향은 S, 그리고 동정 여부는 1 입니다.
라고 출력돼.
그럼 코드들에 설명을 붙여보자.
// 을 하면 주석이라는게 작성 가능해.
즉 // 뒤에 오는 글자들은 전부 무시된다는거야.
이걸로 설명을 달 때 자주 사용해.
#include <iostream> //iostream 라이브러리 불러오기
int main (void) { //main 문
std::string name = "승희"; //name 이라는 문자열 변수를 만들고, 값은 "승희"로 지정
int age = 28; //age 라는 정수 변수를 만들고, 값은 28로 지정
float grade = 98.58f; //grade 라는 소수 변수를 만들고, 값은 98.58로 지정. (f는 float 형이기 때문에 사용한다.)
bool isVirgin = true; //isVirgin 이라는 참/거짓 변수를 만들고, 값은 true (참) 으로 지정
char sm = 'S'; //sm 이라는 변수를 만들고, 값은 'S'로 지정
std::cout << name << "의 나이는 " << age << "살 이며, 성적은 " << grade << "점, 성적 취향은 " << sm << ", 그리고 동정 여부는 : " << isVirgin << " 입니다." << std::endl;
return 0;
}
짜잔!
이제 좀 프로그래머 다워졌어.
주석을 작성해놓으면 너가 퇴사한 후에 들어온 사람이 니 코드를 좀 더 쉽게 이해할 수 있을거야!
그러고보니 저 긴 std::cout 이 신경쓰이네
이것도 설명해보자.
<< 은 마치 연결시켜주는 느낌이라고 생각하면 돼.
std::cout << "안녕" << "하세요" << std::endl;
처럼 사용할 수도 있지.
여기에 변수 이름을 넣으면 변수의 값이 알아서 출력돼!
int num = 1234;
std::cout << num << std::endl;
이렇게 하면 1234 가 출력되겠지!
이런 점들을 이용해서 아까의 그 긴 std::cout 을 만들 수 있었던거지.
int age = 34;
std::cout << "나이 : " << age << std::endl;
같은 느낌이지.
그러고보니 가장 중요한걸 말 안해준 것 같네..
변수값은 프로그램이 실행되는 도중에 변경 가능해.
예를 들어서
int num = 12;
num = 34;
num = 56;
이렇게 해주면,
int num = 12; //이 시점에서는 12
num = 34; //이 시점에서는 34
num = 56; //이 시점에서는 56
즉, 상자에 들어가는 물건을 도중에 바꾸는게 가능한것 처럼,
변수도 값을 도중에 변경하는게 가능하다는거지!
그럼 마지막으로 숙제를 내줄테니, 이거를 읽고있을 정도로 할 짓이 없는 개붕이들은 풀어서 댓글로 달아봐.
1. 해당 코드의 실행 결과를 적으시오. (1점)
#include <iostream>
int main (void) {
int age = 19;
std::cout << "개붕이의 나이는 " << age << "살 입니다." << std::endl;
std::cout << "어라? 갑자기 1년이 지나버렸어요!" << std::endl;
age = 20;
std::cout << "개붕이의 나이는 이제 " << age << "살 입니다." << std::endl;
std::cout << "개붕이가 벌써 성인이에요! 이제 자유에요!" << std::endl;
return 0;
}
숨은음은
그건 이미 정수가 아님 실수지
니가 그렇게 지정해도 저장된 내용을 보면
5.000000000000000000000000000097
이런 식으로 저장됨
쿄코
다시 생각해보니 그래서 지우고 옴
고마워!
숨은음은
그리고 소수로 저장할거면 애당초 5.4라고만 적어도 돼
f를 박는건 정수로 썼는데 실수로 인정하고 싶을 때임
5.4 => 5.40x float
5f => 5.0x float
5 => 5 int
이런 식
쿄코
그건 아닌 것 같은데...?
C++에서는 기본으로 소수는 double로 인식하잖아.
그래서 f를 붙여서 float 범위 소수라고 알려주는거로 알고있었는데..
숨은음은
아차차
근데 빼고 해도 C++은 자동형변환해주니까 크게 문제는 없을 듯
C#은 시발 형변환 자동으로 안해줘서 개가틈
쿄코
ㅋㅋㅋㅋㅋㅋㅋ
숨은음은
아무래도 C나 C++이 쓰기는 어렵지만 그만큼 로우레벨 언어라서 속도가 빠르거든.
퍼포먼스가 중요시되는 쪽은 대부분 C/C++ 쓴다고 보면 돼.
너가 만족하는대로 살면되지 뭐 ㅎㅎ C++ 꼭 해야하는 것도 아닌데
퍽퍽퍽퍽
정렬이 좀 빨라졌어요.
void quick_sort(int list[], int left, int right)
{
int q;
if(left<right)
{
q=partition(list, left, right);
quick_sort(list, left, q-1);
quick_sort(list, q+1, right);
}
}
덕이진리
아 그래서 포인터가 뭐냐고
육아왕
상자 주소
말을잘못해요
ㅇㄷㅇㄷ
일째 밤샘중
Char 형에 작은 정수를 담니...?
어디서 코딩하길래 char 에 정수형을 담아두니...?
쿄코
-128 에서 127까지 담겨
일째 밤샘중
담기는거 알지;;; 정수형을 쓸거면 _int8을 쓰면 되지 혼란을 야기하기 위해서 char 에다가, 정수형을 담는 이유가 뭐냐는거지
위에 설명에도 너가, char는 문자를 위한 변수형이라고 기재하고 혼란스럽게 char 에 정수형을 담는다고 말했는데, 어디서 코딩하길래 그런 혼란스러운 코딩스타일을 쓰고 있냐는거지
쿄코
그렇게 말하니 또 그렇네..
문자만을 위한 변수라고 했을때 댓글로 숫자도 저장 가능하다고 뭐라 했었거든...
나도 개인적으로 경우에 따라서, 1바이트를 표현할때는 __int8 을 사용해야한다고 생각.
중복은붐업부터박고시작
8비트 단위로 통신할때 담아둡니다..
일째 밤샘중
왜 _int8에 안 담고, 굳이 char로 담아서 통신하나여?
통신하는 쪽의 관례인가여? 나는 임베디드쪽은 한번도 경험 안 해봐서 관례를 모름
중복은붐업부터박고시작
나는 int8이라 명시하는걸 선호하긴하는데, 다른코드들 돌아다니는거보면 그냥 char에 담아버리는 경우 많음
이미지의경우 걍 unsigned char로 담기도하고 어차피 int8이나 char나 typedef 관계니까