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 |