오늘의 TIL 목차 (22.07.25)
- 변수, 선언, 정의, 초기화의 정의
- 연산의 단위, 8bit = 1byte
- 자료형의 종류 ( 정수, 실수, 문자, 논리자료형)
- 진수 종류, 10진수 ↔ 2진수 진법 변환
- cin, cout을 이용한 성적 입출력
단어 정의
- 변수 : 변하는 수 (변하는 수를 넣는 그릇처럼 사용됨)
- 선언 : '변수를 선언하다'라고 말하며 숫자를 저장하기 위한 메모리 공간을 할당하는 것
- 초기화 : 메모리 공간을 할당받음과 동시에 사용자가 원하는 값으로 채워서 빌려오는 행위
- 선언과 동시에 초기화(변수 정의)를 생활화할 것. (선언만 한다면 변수에 쓰레기값이 들어감)
int iA; // 선언
iA = 0 // 정의
-
int iA = 0; // 초기화
int iA(0); // C++ 방식의 변수 초기화
연산의 단위
- 연산의 최소 단위 : 1bit
- 저장의 최소 단위 : 1byte
1bit → 1byte → 1KB → 1MB → 1GB → 1TB (단위가 올라갈수록 2^10씩 차이)
* 8bit = 1byte
자료형의 종류
자료형 : 변수의 종류
1. 정수형 2. 실수형 3. 문자 4. 논리자료형
[정수 자료형]
- short (2byte)
- int (4byte) - 주로 사용
- long (4byte)
- long long (8byte)
unsigned 기호 특징
- 정수 자료형은 기본적으로 앞에 singed가 생략되어 있다. (음수 ~ 양수)
- 0 ~ 양수(양수 표현 범위 2배)를 표현하고 싶을 경우, 앞에 unsinged를 무조건 붙여야 한다.
- 정수 타입의 자료형에만 붙여서 표기할 수 있다. (char 포함)
short sA = 32768; // signed short = -32768 ~ +32767
unsigned short sB = 32768; // unsigned short = 0 ~ 65535 (0부터 양수까지)
cout << sA << '\n' << sB << endl; // endl(='\n')
//출력 결과:
-32768
32768
// signed short의 경우 숫자를 초과하며 잘못된 결과값을 출력한다.
// unsigned를 앞에 붙여야지만 양수 전체를 출력할 수 있으면서 제대로 된 결과값을 출력한다.
[실수 자료형]
- float (4byte) - 게임 개발 99% float 사용
- double (8byte)
- long double (8byte)
- 컴파일러는 소수점 이하의 수를 기본적으로 double형으로 인식하여 저장한다.
- 소수점 이하를 가진 수 뒤에 f를 붙이게 되면 float형으로 인식하여 저장한다.
float fPi = 3.14f;
float fTemp = 5.f; // n.0의 경우 n.f로 가능
cout << fPi << endl << fTemp << endl;
/* 출력결과
3.14
5
*/
/* 삽질
double fNum = 3f; //double에서 float형으로 짤린다는 경고
float fPi = 3.14; //출력은 정상적이나 뒤에 f를 붙여주자
*/
[문자 타입의 자료형]
- char (1byte) // -128 ~ 127 , 0 ~ 255
- 영어 단문자만 출력, 작은따옴표{')로 구분
- 변수에 숫자를 넣을 경우, 아스키코드값에 따라 변환되어 출력됨
- 아스키코드는 65 → A, 97 → a 등 영어와 여러 기호를 포함
char cNum = 97;
char cEng = 'A';
cout << cNum << endl;
cout << cEng << endl;
/* 출력결과
a
A
*/
/* 삽질
char cString = 'ABCD'; 의 출력값은 D
큰따옴표는 오류가 뜨지만 작은따옴표로 한다면
가장 끝에 있는 영어 단문자가 출력된다.
*/
[논리자료형] : 참 또는 거짓을 저장하는 용도의 자료형
- bool (1byte)
- 0을 제외한 모든 값을 1로 간주 ( true, false, 숫자를 제외한 경우 참으로 출력되나 경고)
bool bTrue = 4; // 0을 제외한 모든 수는 참, 0.000001도 참
bool bFalse = false; // true, false로 대입하는 게 best
cout << bTrue << endl << bFalse << endl;
/* 출력결과
1
0
*/
/* 삽질
bool bChar = "안녕하세요"; 의 출력값으로 1 (=참)이 나오지만 부적절한 사용
*/
10진수 ↔ 2진수 진법 변환
- 2진수 : 0, 1 → 00 01 10 11
- 10진수 : 0~9 → 10 11 ,, 19 20
- 8진수 : 0~7 → 10 11 ,, 17 20
- 16진수 : 0~9, A, B, C, D , E, F(15) → 10 11 ,, 1F 20
- int iA(10); 초기화 시 iA라는 이름의 정수형 메모리 (4byte = 32bit)에 10이 저장된다.
- 이때, 10은 000,,,1010의 2진수 형태로 저장된다.
10진수 → 2진수 치환
: 10진수를 더 이상 나눠지지 않을 때까지 2로 나눈 후 각 나눈 몫의 나머지를 역방향으로 적는다.
2진수 → 10진수 치환
: 8bit 기준 11111111의 각 자릿수는 2^7, 2^6, 2^5, 2^4, 2^3, 2^2, 2^1, 2^0 즉, 128 64 32 16 8 4 2 1 이다.
00001010 → 8 + 2 = 10
입출력 cin, cout
- cin과 cout은 C++에서 각각 '입력'과 '출력'을 담당
- 시프트 연산자(<<, >>)를 사용하여 입출력 실행
Code. 국어, 영어, 수학 점수 입출력
#include <iostream> // 컴파일 전에 헤더파일 포함시키기
using namespace std; // std 라이브러리 안에 cin, cout
int iKor(0), iEng(0), iMath(0); // C++ 초기화 방식
cout << "국어, 영어, 수학 점수를 차례로 입력하시오 : "; // cout은 왼쪽 시프트 연산자(<<) 사용
cin >> iKor >> iEng >> iMath // cin은 오른쪽 시프트 연산자(>>) 사용, endl 사용 불가능
cout << "국어\t 영어\t 수학\t" << endl; // \t는 탭키만큼 띄어쓰기 (이스케이프 시퀀스 : \n과 같은 특수문자)
cout << iKor << "\t" << iEng << '\t' << iMath << endl; // 이스케이프 시퀀스는 (',") 상관 없음
/* 출력결과
국어, 영어, 수학 점수를 차례로 입력하시오 : 20 30 50
국어 영어 수학
20 30 50
*/
의문점
1. [논리자료형]
bool bChar = "안녕하세요"; 의 경우 출력 결과가 1 (=참) 으로 나온다.
경고창이 안 뜨는 걸 봐서 숫자가 아닌 값이 들어가도
부적절하지 않게 참으로 출력할 수 있는 것인가?
2.[입출력 cin, cout]
int iA(10), iB(20), iC(30);
cout << iA << iB << iC << endl; 의 출력 결과는 102030이다.
10 20 30으로 띄어쓰고 싶을 경우,
cout << iA << " " << iB << " " << iC << endl; 밖에 안되는가?
'C++' 카테고리의 다른 글
| [TIL 5장] 3항 연산자, for문(이중 for문) (0) | 2022.08.01 |
|---|---|
| [TIL 4장] 반복문(feat. break, continue), 난수, time(), typedef (0) | 2022.07.29 |
| [TIL 3장] 형 변환, 증감/시프트 연산자, 분기문 (0) | 2022.07.27 |
| [TIL 2장] 표기법, 상수, 연산자 종류, 보수, sizeof(), bitset<>(), 보수 (0) | 2022.07.27 |
| [TIL 0장] 개발 블로그 참고 및 운영 (0) | 2022.07.23 |