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

+ Recent posts