1챕터와 2챕터를 통괄하는 보충 강의 와 문제해결능력에 대한 강의 노트
특수문자
- \n : 다음 줄
- \t : 탭 문자 (4~8칸 만큼 공백을 만든다 )
- \" : 따옴표 (큰따옴표를 문자열 안에서 활용)
- \0 : 널 문자 (0)
변수의 타입
byte 수를 대충은 인지하고 있어야 한다.
음수가 양수보다 한개 더 많다 (|최소값| > |최대값|) 0을 포함한 이진수 이기 때문
음수가 있는 변수를 signed 데이터 타입 부호가 있다라는 뜻
부호가 없이 쓰고싶을 땐 앞에 unsigned를 붙여주면 된다 -> 부호 없는 정수
(unsigned는 float나 double에는 쓸 수 없다)
long 이라는 데이터 타입은 시스템에 따라서 크기가 달라진다.
32bit에서는 4byte, 64bit에서는 8byte
하지만 long long은 늘 8byte
해당 CPU가 가장 빨리 연산 할 수 있는 데이터 크기가 int
int
- 일반적으로 4byte
- 일반적으로 컴퓨터에서 가장 빠르게 연산할 수 있는 단위
- int는 시스템마다 크기가 다를 수 있다.
- 하지만 현대 컴퓨팅에서는 대부분 4byte가 된다
long
- 4byte
- 다른 프로그래밍 언어에서는 8byte
- C/C++ 에서 8byte를 표현하는것은 long long
- 64bit 컴퓨터 시스템에서 long은 8byte, long long도 8byte
- 즉 8byte 정수형을 위해서는 안전하게 long long을 많이 쓴다
unsigned
- 부호없는 이라는 뜻
- 일반적으로 unsigned가 선언되지 않으면 부호있는 숫자가 된다
데이터형 예시
- // 8byte //long long vLong;
- // 4byte 0, 양수 //unsigned int uInt;
- // 부호없는 8byte 0, 양수 //unsigned long long uLong
- // 아래 코드는 에러 //unsigned float uFloat;
unsigned라는 키워드는 거의 사용하지는 않는다, 그냥 있다 정도만 알면 됨
OverFlow
: 변수형에 할당될 수 있는 값의 범위를 벗어난 연산은 Overflow가 일어나게 된다
모든 변수는 자신이 갖고 있는 값 이상을 갖게 되려고 할 때 오버플로우가 일어나며 가장 작은 숫자로 바뀜
Char의 최대값
Char (signed value)의 경우 -> 부호가 있는 Char의 최대값 -> 127이 양수로 최대값이 된다
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
위에서 +1을 하게 되면 앞에 있는 0이라는 부호가 바뀌게 된다
Char의 최소값 -> 음수의 최소값은 -128
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
가장 앞쪽에 있는 부호가 0이면 양수 1이면 음수
변수가 가질 수 있는 값의 최대값의 크기를 벗어나게 되면 overflow 가 발생
Char의 최대값 즉 부호있는 1byte 숫자의 최대값인 1111111 에다가 1을 더하게 되면
최소값이 만들어 진다는거, 이걸 overflow라고 함
때문에 프로그래머들은 자기가 사용해야 될 어떤 변수의 크기가 어느정도 될지를 미리 예측하고 있어야 됨
Underflow
: 가장 낮은 숫자가 더 낮은 숫자를 가지려 할 때 일어난다. 보통 0에서 -1이 되는 과정
0
Char (signed value)의 경우
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
-1 을 하기
-1
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0에서 -1이 되는 과정에서 underflow 발생
젤 앞은 부호 bit 니까 양수 부호가 0이면 양수
음수의 정수 중에서 가장 큰 수는 -1
printf format string
: printf 변환 문자는 format string 이라고 불린다.
이 포맷스트링에는 여러 종류가 있으나 실질적으로 필요할 때 찾아볼 수 있는 수준이면 된다
타입 | 설명 |
%d | 정수형 변환 |
%c | 문자형 변환 |
%u | 부호없는 정수형 변환 |
%ld | long long 변환 |
%f | 소수점수 변환 |
%s | 문자열 변환 |
배열 크기에 관하여
- 배열 크기에는 변수가 들어갈 수 없다 (배열 인덱스에는 가능하나) 배열을 선언할때 크기를 지정할 때에는 변수를 활용할 수 없다
- 동적 메모리 할당에서는 가능하다
- 다른 언어에는 malloc 이라는 동적 메모리 할당을 자동으로 하기 때문에 가능
int size = 10;
int vArray[size];
// size 자리에 변수를 집어넣을 수 없다. 숫자만 가능
프로그램 실행과 메모리
- 변수를 만들게 되면 (램)메모리 상에서 변수에 대한 공간이 할당
- 이는 배열(Array)도 마찬가지며, 이 변수의 공간에 대한 3요소가 정해지는데 이것이 이름(name), 주소(address), 값(value)다
- 여기에서 주소는 컴퓨터가 변수를 관리하는 방법이 되는데 배열은 기본적으로 포인터 형태이기 때문에 이 주소의 음수 인덱스에 접근하거나 크기를 벗어나는 접근이 가능
'C언어' 카테고리의 다른 글
함께 만드는 코딩 #1 - MBTI 성격검사 테스트 (0) | 2021.08.25 |
---|---|
심화 C 언어 8 (함께 만드는 코딩 #1 - MBTI 성격검사 테스트) (0) | 2021.08.17 |
심화 C 언어 7 (매크로 - C/C++의 독특한 매력) (0) | 2021.08.06 |
심화 C 언어 7 (포인터 - 포인터의 포인터, 함수의 파라미터의 포인터) (0) | 2021.08.04 |
심화 C 언어 6 (포인터 3 - 메모리 동적할당 / 배열) (0) | 2021.08.03 |