
자료형
c언어는 파이썬과 다르게 변수를 선언할 때 자료형을 먼저 적어줘야 한다.
a=10
b="Korea"
c=1.12345
파이썬에서는 변수를 다음과 같이 정하면, a와 b와 c는 자동적으로 각각 정수, 문자열, 실수 자료형임을 인식하도록 설계되어 있다.
이와 달리 c언어는 변수를 선언할 때 변수가 위치할 메모리를 할당해줘야 하는데 그 메모리가 얼마나 필요한지에 대한 정보가 자료형에 있다.
메모리 : 문자형은 1byte, 정수형은 4bytes, 실수형 중 float은 4bytes, double은 8bytes이다.
/*정수형*/
int a;
a=10;
기본형은 이렇고
int a = 10;
와 같이 줄여써도 된다. (더 편하다)
원시 자료형(흔히 말하는 자료형)
char : 문자형 (string 자료형이 없다)
int : 정수형
float : 실수형
double : 실수형
(void : 자료형이 없다)
<char 자료형 사용>
#include <stdio.h>
int main() {
char x = 'a';
printf("%c", x);
return 0;
}
결과는 다음과 같다
a
%c : char 자료형 포맷.
printf 할 때 쓰는 것, 파이썬 print함수에서 숫자를 포맷할 때
print(f{"%d"},x)
로 쓰는 것과 비슷하다.
#include <stdio.h>
int main() {
char x = 65;
printf("%c", x);
return 0;
}
결과는 다음과 같다
a
분명히 변수 x에 숫자를 저장했는데 자료형이 char라는 이유로 a라고 출력된다. 우리가 볼 때는 a로 보이지만 컴퓨터는 a를 숫자로 저장하고 있다. 즉 우리가 문자를 데이터에 저장해도 컴퓨터는 숫자인지 문자인지 구분 못한다. 자료형을 보고 구분한다. 따라서 %c를 출력하라고 했기 때문에 65를 char 자료형인 a 로 출력해준다.
(문자에 대응되는 숫자는 ASCII Code 에서 확인가능하다.)
<int와 char 자료형 사이의 변환>
#include <stdio.h>
int main() {
int x = 65;
printf("%c\n", x);
char y = 65;
printf("%c\n", y);
char z = 'B';
printf("%d\n", z);
return 0;
}
char 자료형과 int 자료형 간 변환이 자유롭다.
#include <stdio.h>
int main() {
int x = 100;
printf("10진수로 출력 : %d\n", x);
printf("8진수로 출력 : %o\n", x);
printf("16진수로 출력 : %x\n", x);
return 0;
}
결과는 다음과 같다.
10진수로 출력 : 100
8진수로 출력 : 144
16진수로 출력 : 64
%d : 10진수 출력 포맷
%o : 8진수 출력 포맷
%x : 16진수 출력 포맷
<double 자료형 사용>
#include <stdio.h>
#define MONTHS 12
int main() {
double monthSalary = 1000.5;
printf("$ %.2f", monthSalary * MONTHS);
return 0;
}
결과는 다음과 같다.
$ 12006.00
#define MONTHS 12
MONTHS 라는 상수를 12로 정의한다는 뜻이다.

기수법
기수법 : 수를 표현하는 법. 예를들면 10(숫자로표현), 십(한글로표현), ten(영어로 표현)
십진법 : 0~9 총 10개의 수에 10의 제곱을 차례로 곱하여서 수를 나타내는 것. (우리가 흔히쓰는 방법)
이진법 : 0~1 총 2개의 수에 2의 제곱을 차례로 곱하여서 수를 나타내는 것. (컴퓨터가 쓰는 방법)
십진법을 이진법으로 나타내는 법 : 몫이 0이 될 때 까지 2로 나눈 나머지를 역순으로 재배치한다.
2 | 8 | ...0 |
2 | 4 | ...0 |
2 | 2 | ...0 |
2 | 1 | ...1 |
0 |
8=1000
16진법 : 0x0123456789ABCDEF
0x : 16진법임을 알려주는 코드
<십진법을 십육진법으로 나타내는 법>
10진수를 2진수로 바꾼 후에 16진수로 바꾼다.
또는 16진수를 2진수로 바꾼 후에 10진수로 바꾼다.
<16진법과 2진법과 10진법>
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
컴퓨터 한 개의 메모리 소자 : bit . 이진수 한자리를 담을 수 있다. 0 또는1.
1byte = 8bit : (2진수) 00000000~11111111 = (10진수) 0~255 = (16진수) 0~0xFF총 256개의 수를 나타낼 수 있다.
컴퓨터는 CPU의 레지스터(작은메모리공간)에 값을 불러놓고 연산을 수행한다.
레지스터란? CPU에서 연산을 수행하기 위해 잠시 값을 써 놓는 부분을 말한다.
워드란? 레지스터의 크기. 컴퓨터 상에서 연산이 실행 되는 최소 단위를 말한다.
32비트 컴퓨터 : 1워드=32bit=4bytes
64비트 컴퓨터 : 1워드=64bit=8bytes
int형에 할당되는 메모리 : 4bytes=32bit : 이진법 숫자 갯수 총32개.
쉽게 말해 칸을 32개 만든다. 각 칸에 0또는1을 넣고, 맨 앞칸은 양수인지 음수인지를 알려주는 숫자가 들어간다.
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
와 같이.
<컴퓨터가 음수를 표현하는 방법>
2의 보수 표현 체계 : 비트를 반전시킨 뒤에 1을 더한다.
맨 앞 비트가 1이면 -(음수), 0이면 +(양수)로 읽는다.
음수, 즉 맨 앞 비트가 1 이면 그대로 읽으면 안되고 반드시 양수로 바꾼후 '-'를 붙어야 한다.
쉽게 말해 비트 맨 앞의 숫자가 1이면
1. 아 음수구나.
2. 반전시키자
3. 1을 더하자.
4. 나온 수에 '-'를 붙이자.
참고
오버플로우 : 자료형의 최대범위 보다 큰 수를 대입함으로 발생하는 문제. 데이터 크기 유의.
'프로그래밍 > C언어' 카테고리의 다른 글
6. c언어 반복문 for, while (0) | 2023.01.31 |
---|---|
5. c언어 if 문 if, if else, else (1) | 2023.01.21 |
4. c언어 scanf 문자 입력 받기, 형변환 (0) | 2023.01.21 |
3. c언어 연산자 증감, 복합대입, 관계, 로직, 조건, 비트 (0) | 2023.01.20 |
1. c언어 상수, 변수, 메모리 (0) | 2023.01.10 |
댓글