life-with-coding.tistory.com/298

음수와 양수 변환

-> 단순하게 부호비트를 1로 바꾼다고해서 변환이 되는 것이 아니다!!

0001  1
1001 -1
----------------------
1010  0 이 아니다.
음수와 양수를 변환하는 방법으로는 2의 보수를 취해야 된다.

 

2의 보수란?

-> 1의 보수 취한 값에 + 1 한 것. 예) 1110 -> 1111

 

1의 보수란?

-> 비트 반전

-> 0은 1로, 1은 0으로 변환하는 것. 예) 0001 -> 1110

 

음수 1을 표현하는 방법

-> 표현 범위에서 벗어나면 제외된다.

-> 예) 0001 + 1111 = 1 0000 여기서 1은 표현 범위에서 벗어났기 때문에 제외 된다. 

-> 따라서 0001(1의 보수) -> 1111(2의 보수) = 0000

 

실수 자료형의 표현 방식

->이 방식은 정수부와 소수부의 자릿수가 크지 않아 표현 범위가 매우 적다.

 

부동 소수점 방식

-> 하나의 실수를 가수부(m)와 지수부(e)로 나누어 표현하는 방식.

-> 부동 소수점의 표현 방식은 +-(1.m) * 2^(e - 127) 이다.

-> 부동 소수점은 오차가 존재하는 단점이 있다.

int main()
{
	float a = 0;

	for (int i = 0; i < 100; ++i)
		a += 0.1f;

	printf("%f", a);
}

아스키코드란?

-> 아스키코드는 128개의 문자를 표현할 수 있다.

-> 맨 앞에 1bit는 Parity Bit(패리티 비트)라고 하며, 통신 오류 검출을 위해 사용했다.

-> 패리티 비트를 제외한 7bit로는 영문 키보드로 표현할 수 있는 모든 가능성을 담았다.

-> 다른 나라에서는 7bit로 표현하기에는 부족하니 문제가 발생했다.

-> 이를 해결하기 위해 8bit 모두 사용하며, 이를 ANSI 코드라고 부르는 사람도 있다.

-> 그래도 비 유럽국가(한국, 중국)에서는 여전히 제한적이다. (256개의 문자를 사용해도 부족함)

-> 이 모든 문제를 해결하기 위해 유니코드를 추가하게 되었다.

 

아스키코드를 참조하여 Hello 출력하기

int main()
{
	char H = 72, e = 101, l = 108, o = 111;

	cout << H << e << l << l << o << "\n";
}

동일한 문자가 들어가는 경우 변수를 추가할 필요가 없다.

상수란?

-> 변하지 않고 고정되어 있는 수

 

다음과 같이 a의 값을 변경할 경우 값이 변한다.

int main()
{
	int a = 10;
	a = 999;

	cout << a << endl;

}

이런 경우 const를 자료형 앞에 명시해주면 상수로 만들 수 있다.

 

const

-> 변수 선언 시 자료형 앞에 const를 명시하면 상수가 된다.

 

int a = 10 -> const int a = 10;

 

그러면 a가 상수로 만들어졌기 때문에 수정을 할 수가 없게 된다.

상수 사용 시 주의 사항

-> 변수를 상수로 만들 경우 동시에 초기화를 진행 해줘야 된다.

-> const int a; -> const int a = 0;

-> 변수를 선언만 할 경우 쓰레기 값으로 초기화가 진행 된다.

-> 쓰레기 값이 상수가 되면 사용하지 않는 변수가 메모리에 등록되는 형식이다.

 

리터럴 상수

-> 문자 그대로의 상수 예) 1, 2, 3

-> 컴퓨터가 연산을 수행하는 곳은 CPU이다.

-> 단, 메모리에 등록된 정보를 토대로 연산을 수행한다.

-> 3과 4는 메모리에 등록되어 있지 않아 연산을 수행할 수 없는 상황이다.

-> 리터럴 상수의 연산을 수행하기 위해 임시 메모리 영역에 잠시 등록하여 연산을 수행한다.

-> 말 그대로 임시 메모리 영역이기 때문에 코드라인을 벗어나는 즉시 소멸한다.

-> 연산 결과도 리터럴 상수이기 때문에 임시 메모리에 등록이 된다.

-> 다음과 같은 연산을 수행하기 위해서는 12byte의 메모리 영역이 필요하다.

-> int a = 3 + 4 -> CPU -> 임시 메모리 영역(3, 4) -> 임시 메모리 영역(7) 복사 -> a = 7

-> 결과가 나오게되면 3과 4는 코드라인에서 벗어나기 때문에 소멸이 된다.

-> 3과 4가 소멸이 되었기 때문에 사용하고 있는 메모리 영역은 12byte -> 4byte가 된다.

 

float에만 f키워드를 붙이는 이유. 예) 3.14 -> 3.14f

-> 임시 메모리 영역에 등록되는 데이터가 정수형이라면 기본 int형으로 간주한다. (4byte)

-> 임시 메모리 영역에 등록되는 데이터가 실수형이라면 기본 double형으로 간주한다. (8byte)

 

이유 추가

 

표기법

-> 변수명을 설정하는데 있어 해당 소속 규칙에 맞는 방법으로 설정하는 것.

 

표기법이 필요한 이유

-> 팀 작업을 수행하는데 있어 변수명을 일정하게 설정하여 원활한 팀작업을 하기 위해서

 

멤버변수

->m_Test;

표기법 설명
헝가리안 표기법

-> 변수명 앞에 각 자료형을 뜻하는 문자를 삽입하여 만든다.

-> 변수명만 보고도 어떤 자료형안이 알아볼 수 있도록하는 표기법

-> int iTest, float fTest

카멜 표기법 -> 변수명이 소문자로 시작, 복합어일 경우 새로 시작하는 단어는 대문자로 시작 예) playerHp
파스칼 표기법 -> 변수명이 대문자로 시작 예) PlayerHp
언더바 표기법 

-> 단어와 단어 사이에 _를 사용한다. 예) player_hp

 

cin

-> Console Input의 약자

-> 데이터를 입력할 때 사용한다. 

예)

int main()
{
	int a;

	cin >> a;

	cout << a << endl;

}

'Programming > C++ Basic' 카테고리의 다른 글

C++ 분기문(if, else if, else, switch)  (0) 2020.08.19
C++ 형변환  (0) 2020.08.18
C++ 진수, 연산자  (0) 2020.08.14
C++ 변수와 자료형  (0) 2020.08.12
C++ 절차지향과 객체지향, 문자열 출력, 실행 순서  (0) 2020.08.11

변수 : 메모리를 할당한 공간에 이름을 부여하는 것.

-> 할당한 메모리를 의미.

-> int a, b, c등

 

자료형 : 어떤 데이터를 저장할지, 얼마만큼 메모리 공간을 부여할지 설정하는 것.

-> int, float, double 등

 

변수에 최초로 값을 채워넣는 행위.

int PlayerHP = 100;

	// PlayerHP라는 이름을 부여받은 공간에 100이라는 정수 값을 채워 넣는다.
	PlayerHP = 100;

	// 선언과 동시에 초기화도 가능
	int PlayerHP = 100;

변수명 규칙

 

#1. 알파벳과 숫자를 조합하여 만들 수 있다.

단, 숫자가 먼저 올 수 없다.

 

int PlayerHP1; // 가능

int Player1HP; // 가능

int 1PlayerHP; // 불가능

 

#2. 변수명은 특수 문자로 만들 수 없다.

단, _는 허용된다.

int PlayerHP!; // 불가능

int PlayerHP_; // 가능

 

#3. 변수명은 대소문자를 확실히 구분한다.

int playerHp;

int PlayerHp;

 

#4 같은 이름으로 변수명을 재 선언 할 수 없다.

int PlayerHp;

int PlayerHp;

 

#5 프로그래밍에서 제공하는 기본 키워드로는 이름을 지을 수 없다.

int namespace;

 

자료형

 

#1. 기본 자료형

프로그래밍에서 기본적으로 제공하는 타입을 뜻한다.

 

#2. 사용자 정의 자료형

사용자가 자료형을 만들어서 사용한다.

 

자료형의 종류

정수 자료형, 실수 자료형, 단일 문자 자료형, 논리 자료형

 

#1. 정수 자료형

자료형 크기(byte)
short 2
int 4
long 4
long long 8

정수 자료형에 int와 long은 서로 같은 크기이다. 이유는 무엇일까?

자료형의 크기는 운영체제의 환경에 따라 변경될 수 있기 때문이다.

 

16bit 운영체제에서 int의 크기가 2byte 였는데, 32bit 운영체제로 바뀌면서 int의 크기가 4byte로 증가하였다.

 

#2. 실수 자료형

자료형 크기
float 4
double 8
long double 8

#3. 단일 문자 자료형

자료형 크기
char 1

 

#4. 논리 자료형

참과 거짓을 표현하는 자료형.

자료형 크기
bool 1

 

절차지향 프로그래밍

-> 프로그램 전체가 유기적으로 연결하도록 만드는 프로그래밍 기법이다.

객체지향 프로그래밍

-> 프로그램을 유연하고 변경 용이하게 설계할 수 있기 때문에 대규모 프로젝트에서 이점을 보인다.

 

문자열 출력

 

문자열을 출력하는 코드는 C언어의 printf와 C++언어부터 생긴 std::cout 두 가지가 존재하는데

이번에는 std::cout을 사용하여 문자열을 출력해보겠다.

#include <iostream> 
using namespace std; 

void main() 
{ 
cout << "Hello World" << endl; 
}

실행순서 : 코드 작성 -> 전처리기 -> 컴파일 -> 어셈블러 -> 링커 -> 실행 파일 생성

 

#1 코드 작성

사용자가 프로그래밍 문법에 맞게 코드를 작성하는 단계.

 

#2 전처리기

#은 전처리 지시자, #이 작성된 코드 라인을 번역하기 이전에 수행하는 단계.

 

#3 컴파일

고수준 언어를 저수준 언어로 번역하는 단계, 즉 프로그래밍 문법에 맞는 언어를 어셈블리어로 번역하는 단계.

 

#4 어셈블러

저수준 언어를 기계어로 변역하는 단계

어셈블리어를 바이너리 코드(기계어)로 번역하는 단계

어셈블러 단계를 거치면 .obj 파일이 생성된다.

 

#5 링커

.obj 파일과 .lib파일을 하나로 묶는 작업을 수행하는 단계.

 

#6 실행 파일 생성

하나로 묶으면 실행파일이 생성됨.

 

주석이란?

코드에 삽입된 메모를 뜻한다.

주석 처리가 되면 컴파일 대상에서 제외된다.

 

주석을 사용하는 이유

프로그래밍은 팀 작업을 주로 한다.

타인의 코드를 분석하는 것 보다 주석을 달아 놓으면 더 쉽게 이해할 수 있다.

 

주석 사용 방법

#1 행 단위 주석 : //

한 행(한 줄)을 번역하지 않는다.

 

#2 블록 단위 주석 : /* ~ */

사용자가 설정한 위치부터 추가로 설정한 위치까지 번역하지 않는다.

 

주석 사용 및 해제 단축키

사용 : Ctrl + K + C

해제 : Ctrl + K + U

 

주석 사용 시 주의 사항

#1 단축키 사용 실수

Ctrl + U : 모든 대문자를 소문자로 바꿔주는 단축키

 

예를 들어 작업을 하는 도중에 주석 처리를 풀어야 되는 상황이 발생한다.

그런데 실수로 Ctrl + K + U가 아닌 Ctrl + U를 누르게 되면,

주석처리를 했던 부분의 알파벳 대문자가 소문자로 바뀌게되는 상황이 발생한다.

 

발생한 즉시 알게되면 Ctrl + Z로 되돌릴 수 있지만, 만약 파일을 저장하고 컴퓨터를 종료하게 되는순간

코드를 다시 짜야되는 상황이 발생할 수도 있으므로 주의해야한다.

 

다음은 #include <iostream>의 의미이다.

 

# : 전처리 지시자

컴파일 이전에 처리하라고 지시

 

include : 포함하다.

컴파일 이전에 포함하라고 지시

 

<iostream> : C++ 표준 입출력 라이브러리

i = Input / o = Output / stream = 통로

 

즉, #include <iostream>은 컴파일 이전에 C++ 표준 입출력 라이브러리를 포함하라고 지시한다는 의미이다.

 

void main() 함수

1. 프로그램의 진입점을 설정할 수 있다.

2. 프로그램 실행 시 가장 먼저 호출된다.

 

cout : Console Output의 약자

1. 함수가 아니라 객체이다.

 

<< : 본 기능은 연산자이지만 cout과 만나면서 추출 연산자로 사용된다.

1. "무엇을" 이라는 의미를 가진다.

 

단일 문자 : 한 개의 문자를 사용한다. 작은 따옴표로 감싼다. 'A'

문자열 : 두 개 이상 문자를 사용한다. 큰 따옴표로 감싼다. "AA"

 

endl : End Line의 약자.

1. 줄바꿈의 기능을 담당하는 객체

 

using namespace std;

1. 표준이라는 이름 공간을 사용하라고 지시.

 

"::" : 스코프 연산자

1. 이름공간::사용하고자하는 기능 예) std::cout

 

+ Recent posts