1.주석
//
- 설명(코드)의 역할, 필요한 내용들을 설명하여 달아놓는다
- // 이후에 작성한 문자는 코드로 인식되지 않는다
2.자료형 (Data Type)
같은 정수형 혹은 실수형 자료형이라도, 어떤 자료형을 선택했는지에 따라 크기가 달라짐
변수의 크기: (크기 단위, byte)
1 byte = 8 bit: $2^{8} = 256$개의 state를 표현가능
- 1bit = value가 있다(1), 없다(0)
- $2^{10} = 1 KB(Byte)$, $2^{20} = 1 MB(Byte)$, $2^{30} = 1 GB(Byte)$, $2^{40} = 1 TB(Byte)$
- unsigned: 0 ~ 255 (부호 고려 X) -> 8개 bit를 모두 데이터 비트로 생각하고 작업을 진행
- signed: -128 ~ 127 (부호 고려 O) -> 8개 bit를 모두 데이터 비트로 생각하지 않고 MSB를 부호 비트로 생각하고 작업을 진행
- MSB가 1이면: -1 ~ -128
- MSB가 0이면: 0 ~ 127
음수 Concept: $-N$ -> $N + ? = 0$ N과 더해서 0이 되는 수 = Complement
(Diminished) Radix Complement
- (r - 1)'s complement of N = $( (진수)^{자릿수} - 1 ) - 원래 숫자$
- r's complement of N = $(진수)^{자릿수} - 원래 숫자$
- (r-1)의 보수 + 1 = r의 보수
- 1's complement: 0 <-> 1 switch
- 2's complement: 0 <-> 1 switch & 끝에 +1
- MSB = 1이면 음수이므로 바로 보수 취하고 앞에 (-) 붙여서 어떤 수인지 체크
Human: Signed(부호) - Magnitude(크기)
Computers: Signed(부호) r's Complement(보수)
동일한 메모리 크기 공간에 동일한 값이 채워졌어도 해석하는 방식(관점)에 따라 value가 다르게 해석될 수 있다
- 11111111: unsigned char의 경우 255라고 인식하지만, char의 경우 -1이라고 인식한다
정수형과 실수형은 메모리를 다루는 방식이 완전히 다르다: 둘을 혼동해서 사용하지 말아야 함
정수는 정수끼리 실수는 실수끼리 연산하되, 두 표현방식의 피 연산자가 연산될 경우 명시적으로 반환하자
정수형
정수형은 bit라는 한정적인 공간 안에서 2진수로 각각의 숫자들을 대응
숫자의 표현 범위가 한정적임
- char(1)
- unsigned char: 0 ~ 255
- (signed) char: -127 ~ 128
- short(2)
- $2^{16} = 65536$개의 state 표현 가능
- int(4)
- long(4)
- long long(8)
실수형
부동소수점이라는 실수 표현 체계를 따름 (부호에 따라 MSB설정 -> 절댓값 2진수 변환 -> 소수점 제거 -> 앞에서 끊기)
특정 실수에 딱 떨어지는 bit 값이 존재하는 것이 아니라 그에 근사한 값으로 bit값을 세팅
실수 표현방식은 정밀도에 의존하므로, double(8) 자료형이 float(4)보다 더 아래의 소수점까지 정확하게 표현이 가능하다
실수를 상수로 적을 경우 소수점 뒤에 f를 붙이면 float 자료형으로, f를 붙이지 않으면 double 자료형으로 간주
- float(4): 소수 맨 마지막에 f를 붙인다
- 10.2415f
- double(8): 소수 그자체로 둔다
- 10.2415
int data = 0 ;
-> int 형 변수이므로 저장되는 데이터의 크기가 4 byte이고, 정수형 데이터가 저장될 것이다
// 주석
// 설명 역할, 코드로 인식되지 않는다.
int main()
{
// 자료형 (크기 단위, byte): Data type
// 정수형: char(1), short(2), int(4), long(4), long long(8)
// 실수형: float(4), double(8)
// int: 자료형
// data: 변수명
int data = 0;
// 1 Byte로 양수만 표현
// 256가지 -> 0 ~ 255
unsigned char c = 0;
c = 255;
c = 256; // overflow 발생하여 0반환
c = -1; // 11111111으로 인식하여 255 반환
// 1 Byte로 양수, 음수 둘 다 표현
// 256가지 -> -128 ~ 127
char c1 = 0;
c1 = 255; // 11111111으로 인식하여 -1 반환 (1의 보수)
// 음의 정수 찾기 (2의 보수법)
// 대응되는 양수의 부호를 반전 후, 1을 더한다
int a = 4 + 4.0;
// 정수표현 방식과 실수표현 방식은 다르다
// 실수 표현방식은 정밀도에 의존한다
// 따라서 double(8) 자료형이 float(4)보다 더 아래의 소수점까지 정확하게 표현이 가능하다
// 정수는 정수끼리 실수는 실수끼리 연산하되, 두 표현방식의 피 연산자가 연산될 경우 명시적으로 반환하자
float f = 10.2415f + (float)20;
return 0;
}