[정처기 실기] 프로그래밍 문제 이론 - C언어
> 1 C언어
2 JAVA
3 Python
1. C언어
C언어 값
정수 / 정수 = 정수값만 취함 ex. 5 / 2 = 2
정수 / 실수 = 실수 ex. 5 / 2.0 = 2.5
참 값 : 1로 표현
거짓 값 : 0로 표현
실수 > 정수로 형변환 시 소수점 버림 ex. (int) 6.75 = 6
(1 Byte = 8 Bit)
char : 1 Byte
int : 4 Byte
float : 4 Byte
double : 8 Byte
bool : 1 Byte
주소값 : 8 Byte (int*, char* 등)
struct : 가장 큰 메모리 값을 기준으로 구역을 나눠서 더함
ex. struct test { char a; int b; } : int형이 4 Byte이므로 기준이 4 Byte로, char도 4 Byte로 2구역, 총 8 Byte
ex. struct test { char a; char b; int c; } : int형이 4 Byte이므로 기준이 4 Byte로, char도 4 Byte, 이때, a와 b가 모두 4 Byte 안에 포함가능 하므로 2 구역이면 충분, 총 8 Byte
ex. struct test { char a; int c; char b; } : int형이 4 Byte이므로 기준이 4 Byte로, char도 4 Byte, 이때, 순서가 char int char 이므로 char를 한 구역에서 사용할 수 없으므로 3구역이 필요, 총 12 Byte
ex. struct test { char a; int b; char c; char d; char e; char f; char g; } : int형이 4 Byte이므로 기준이 4 Byte로, char도 4 Byte, a, b, cdef, g 이렇게 4 구역이 필요, 총 16 Byte
ex. struct test { char a; int c; double b; } : double형이 8 Byte이므로, char도 8 Byte, 이 때, c도 8 Byte 안에 포함가능 하므로, 2구역이면 충분, 총 16 Byte
unsinged char : 부호 비트가 없는 값 8 Bit
char : 맨 앞이 부호 비트인 값 8 Bit, (1 : -, 0 : +)
char에서 문자열을 넣을 때 자동으로 추가로 널문자(\0) 삽입
ex. char ch[5]; : ch의 sizeof는 5, char str[] = "abcde"; : str의 sizeof는 6
sizeof : 메모리의 크기 구하는 것 ex. int a[ ] = {95, 75, 100, 50};일 때, sizeof(a) : 4 Byte * 4 = 16, sizeof(int) : 4 Byte = 4
전역 변수, 정적 변수, int형 배열로 선언할 때 기본적으로 각 요소에 0 들어감
%s : 해당하는 주소값부터 널문자 만날 때까지 출력, %c : 한 글자만 출력
C언어 함수
strstr(str1의 주소, str2의 주소) : str1 문자열에서 str2 문자열과 일치하는 문자열이 있으면 해당 위치의 포인터를 반환
strcat(str1, str2) : str1 문자열에 str2 문자열 이어 붙이기
strncat(str1, str2, n) : st1 문자열에 str2 문자열 n개만큼 이어 붙이기
strcpy(str1, str2) : str2 문자열에 str1을 복사
strncpy(str1, str2, n) : str2 문자열 n개 공간에 str1 문자열 n개를 복사
, 연산자
, 연산자는 오른쪽 값 대입 ex. (10, (20, 30), 40) = 40
~ 비트 반전 연산자
양수 : 절댓값으로 변환 후, 1 더하고 - 부호 붙이기 ex. 5 > 6 > -6
음수 : 절댓값으로 변환 후, 1 빼고 + 부호 붙이기 ex. -5 > 5 > 4
프로그램 작성 순서
선언 > 입력 > 처리 > 출력
프로그램 수행 순서
전처리기(preprocessor) > 컴파일러(compiler) > 어셈블러(assembler) > 링커(linker)
변수 종류
전역변수 : 모든 함수 위에 선언되어 모든 곳에서 수행, 프로그램 종료될 때까지 메모리상에 존재
정적 변수 : 함수 안에 선언되어 해당 함수 안에서만 수행, 프로그램 종료될 때까지 메모리상에 존재
지역 변수 : 함수 안에 선언되어 해당 함수 안에서만 수행, 해당 함수 안 중괄호가 끝나면 메모리에서 삭제
10진수를 2진수로 변환
- 2진수 > 8진수(o)
뒤에서 3개씩 4, 2, 1 구역으로 나누고, 1이 있는 구역의 숫자 쓰기
ex. 2진수 10000를 8진수로 변환
0(4) 1(2) 0(1) / 0(4) 0(2) 0(1)
/ 기준으로 앞에서 1이 있는 2가 선택, 뒤에서는 1이 없으니 0이 선택
20
- 2진수 > 16진수(x)
뒤에서 4개씩 8, 4, 2, 1 구역으로 나누고, 1이 있는 구역의 숫자 쓰기
ex. 2진수 10001를 16진수로 변환
0(2) 1(1) / 0(8) 0(4) 0(2) 1(1)
/ 기준으로 앞에서 1이 있는 1이 선택, 뒤에서는 1이 있는 1이 선택
11
<반대로>
ex. 0x11를 2진수로 변환
0(8) 0(4) 0(2) 1(1) / 0(8) 0(4) 0(2) 1(1)
/ 기준으로 앞에서 1이 선택된 구역을 1로, 뒤에서 1이 선택된 구역을 1로 변경
10001
ex. 0x0f를 2진수로 변환
0(8) 0(4) 0(2) 0(1) / 1(8) 1(4) 1(2) 1(1)
/ 기준으로 앞에서 0이므로 모든 구역을 0으로, 뒤에서 f이므로 모든 구역을 1로 변경
1111
ex. (char) 0x15213F10 >> 4
0x : 16진수란 의미
15213F10 : 한 숫자 당 4 Bit
>> 4 : 4 Bit 버리기
= 15213F1
(char) : 8 Bit 공간이므로, 뒤에서 8 Bit만 가져오기
= F1
ex. char형인 0xF1를 10진수로 변환, unsigned char형인 0xF1를 10진수로 변환
11110001
- char형
맨 앞 1은 부호 비트, (1 : -, 0 : +)
1(-)1110001 > 음수이므로 2의 보수로 표현
우선 1의 보수로 표현 : 1(-)0001110
2의 보수로 표현(1을 더한다) : 1(-)0001111를 10진수로 변
15
- unsigned char형
부호 비트X
11110001를 10진수로 변환
241
- 10진수(d) > 2진수
정수 부분 : 2의 제곱수 나열하여, 큰 수부터 빼기
소수 부분 : 1이 될 때까지 2 곱하기
ex. 10진수 45.1875를 2진수로 변환
정수 부분 : 45
45 = 32 + 8 + 4 + 1
1(32) 0(16) 1(8) 1(4) 0(2) 1(1)
소수 부분 : 0.1875
0.1875 × 2 = 0.375, 101101.0
0.375 × 2 = 0.75, 101101.00
0.75 × 2 = 1.5, 101101.001
0.5 × 2 = 1, 101101.0011
101101.0011
#define
#define (상수명) (상수값) ex. #define VALUE1 1 : 앞으로 VALUE1 값은 1로 고정
공용체
메모리를 공유하여 제일 큰 기억공간 하나만 사용
ex. union data { int a; float b; double c; } : int(4Byte), float(4Byte), double(8Byte) 중 가장 큰 8 Byte가 공용체 기억공간의 크기
ex. union { int arr1[2]; char arr2 = { 16, 17, 18, 19, 20, 21, 22, 23 }; }
: arr2가 8 Byte 사용하고 있을 때, arr2의 0인덱스는 16, 17, 18, 19이고, arr2의 1인덱스는 20, 21, 22, 23이 됨
fork( )
자식 프로세스 하나 더 생성함, 부모 프로세스랑 같은 프로세스를 한 벌 더 생성된다고 생각하면 됨
fork( )의 값 : 양수(부모에 대한 값), 0(자식에 대한 값), 음수(실패한 경우) 3가지
ex. pid_t pid; pid = fork( ); : pid의 값이 양수, 0, 음수로 나올 수 있음
이때, fork( )의 값이 양수(부모에 대한 값)부터 실행하고, 그다음 0(자식에 대한 값)을 실행
ex. if (pid > 0) 먼저 수행하고, 그 다음 else if (pid == 0) 수행, 실패 시 else (pid < 0) 실행
fork( )가 n번 수행 시 현재 수행 중인 프로세스의 개수 : 2ⁿ개
엔디안(endian)
리틀 엔디안 : 뒤에서부터 출력
빅 엔디안 : 앞에서부터 출력
'💠기타 > 자격증' 카테고리의 다른 글
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.2) 소프트웨어 설계, 화면 설계 (0) | 2024.03.27 |
---|---|
[정처기 실기] 「1」 | 소프트웨어 구축 - (1.1) 소프트웨어 공학 개념, 프로젝트 계획 / 분석 (1) | 2024.03.26 |
[정처기 필기] 「5」 | 시스템 보안 구축 - (4.2) 서버 인증, 보안 아키텍처 / 프레임워크, 보안 설루션 (1) | 2024.02.25 |
[정처기 필기] 「5」 | 시스템 보안 구축 - (4.1) 서비스 공격 유형 (1) | 2024.02.25 |
[정처기 필기] 「5」 | 소프트웨어 개발 보안 구축 - (3.3) 캡슐화, 암호 알고리즘 (1) | 2024.02.25 |